diff --git a/.github/workflows/APP-Server-gradle-publish.yml b/.github/workflows/APP-Server-gradle-publish.yml index af0163aa..14559045 100644 --- a/.github/workflows/APP-Server-gradle-publish.yml +++ b/.github/workflows/APP-Server-gradle-publish.yml @@ -35,11 +35,11 @@ jobs: token: ${{ secrets.GIT_TOKEN }} submodules: true - - name: Set up JDK 17 + - name: Set up JDK 21 uses: actions/setup-java@v4 with: - java-version: '17' + java-version: '21' distribution: 'temurin' server-id: github # Value of the distributionManagement/repository/id field of the pom.xml settings-path: ${{ github.workspace }} # location for the settings.xml file @@ -64,8 +64,11 @@ jobs: restore-keys: | ${{ github.repository }}-gradle- - - name: Build with Gradle - run: ./gradlew clean tht-apis:clean tht-apis:build + - name: Build with Gradle (NO TEST) + run: ./gradlew clean tht-apis:clean tht-apis:build -x test + + - name: gradle run test + run: ./gradlew tht-apis:test - name: make env now date id: now diff --git a/build.gradle b/build.gradle index 66387d56..a7270225 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,34 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile + +buildscript { + ext { + kotlinVersion = '2.1.0' + springBootVersion = '3.4.1' + } + repositories { + mavenCentral() + } + dependencies { + classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}") + classpath("org.jetbrains.kotlin:kotlin-allopen:${kotlinVersion}") + classpath("org.jetbrains.kotlin:kotlin-noarg:${kotlinVersion}") + } +} + plugins { id 'java' - id 'org.springframework.boot' version '3.0.5' - id 'io.spring.dependency-management' version '1.1.0' + id 'org.springframework.boot' version "${springBootVersion}" + id 'io.spring.dependency-management' version '1.1.3' + + id 'org.jetbrains.kotlin.jvm' version "${kotlinVersion}" + id 'org.jetbrains.kotlin.plugin.spring' version "${kotlinVersion}" + id 'org.jetbrains.kotlin.plugin.jpa' version "${kotlinVersion}" + id 'org.jetbrains.kotlin.kapt' version "${kotlinVersion}" + id 'org.jetbrains.kotlin.plugin.lombok' version "${kotlinVersion}" + id 'io.freefair.lombok' version '8.1.0' + id 'idea' } bootJar {enabled = false} @@ -10,8 +37,8 @@ jar {enabled = true} allprojects { group = 'com.tht' version = '0.0.1-SNAPSHOT' - sourceCompatibility = '17' - targetCompatibility = '17' + sourceCompatibility = '21' + targetCompatibility = '21' repositories { mavenCentral() @@ -31,15 +58,18 @@ subprojects { apply plugin: "io.spring.dependency-management" apply plugin: "java-test-fixtures" -// apply plugin: "com.epages.restdocs-api-spec" -// apply plugin: "org.hidetake.swagger.generator" - test { useJUnitPlatform() } dependencies { + //kotlin + implementation 'org.jetbrains.kotlin:kotlin-reflect' + implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8' + implementation 'com.fasterxml.jackson.module:jackson-module-kotlin' + + //spring boot implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.apache.commons:commons-lang3:3.12.0' @@ -57,7 +87,7 @@ subprojects { implementation 'org.springframework.boot:spring-boot-starter-data-mongodb' //in-memory-mongo - testImplementation 'de.bwaldvogel:mongo-java-server:1.44.0' + testImplementation 'de.bwaldvogel:mongo-java-server:1.46.0' // https://mvnrepository.com/artifact/com.mysql/mysql-connector-j implementation 'com.mysql:mysql-connector-j:8.0.32' @@ -69,8 +99,18 @@ subprojects { implementation group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1' // https://mvnrepository.com/artifact/jakarta.persistence/jakarta.persistence-api - implementation 'jakarta.persistence:jakarta.persistence-api:3.2.0' + implementation 'jakarta.persistence:jakarta.persistence-api' } } +kapt { + keepJavacAnnotationProcessors = true +} + +tasks.withType(KotlinJvmCompile).configureEach { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_21) + freeCompilerArgs.add("-opt-in=kotlin.RequiresOptIn") + } +} \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 249e5832..d64cd491 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ae04661e..1af9e093 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index a69d9cb6..1aa94a42 100755 --- a/gradlew +++ b/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,13 +80,11 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} - -# 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"' +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,22 +131,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 +198,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, 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..93e3f59f 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -26,6 +26,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% diff --git a/settings.gradle b/settings.gradle index 3ca9fe74..6a980067 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,3 +1,6 @@ +plugins { + id 'org.gradle.toolchains.foojay-resolver-convention' version '0.5.0' +} rootProject.name = 'server' include('tht-apis') include('tht-admin') diff --git a/tht-admin/src/main/java/com/tht/thtadmin/security/SecurityConfiguration.java b/tht-admin/src/main/java/com/tht/thtadmin/security/SecurityConfiguration.java index 90d91b24..c26477df 100644 --- a/tht-admin/src/main/java/com/tht/thtadmin/security/SecurityConfiguration.java +++ b/tht-admin/src/main/java/com/tht/thtadmin/security/SecurityConfiguration.java @@ -6,9 +6,9 @@ import org.springframework.boot.autoconfigure.security.servlet.PathRequest; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.Customizer; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import org.springframework.web.cors.CorsConfiguration; @@ -17,6 +17,8 @@ import java.util.List; +import static org.springframework.security.config.Customizer.withDefaults; + @Configuration @EnableWebSecurity @RequiredArgsConstructor @@ -36,10 +38,10 @@ public class SecurityConfiguration { public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception { httpSecurity - .csrf().disable() - .cors(Customizer.withDefaults()) - .httpBasic().disable() - .exceptionHandling(); + .csrf(AbstractHttpConfigurer::disable) + .cors(withDefaults()) + .httpBasic(AbstractHttpConfigurer::disable) + .exceptionHandling(withDefaults()); return httpSecurity .authorizeHttpRequests( @@ -50,11 +52,9 @@ public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws .requestMatchers("create").permitAll() .requestMatchers(SWAGGER_URL_ARRAY).permitAll() .anyRequest().hasAuthority("ADMIN") - - .and() - .addFilterBefore(jwtFilter, UsernamePasswordAuthenticationFilter.class) - .addFilterBefore(exceptionHandlerFilter, JwtFilter.class) ) + .addFilterBefore(jwtFilter, UsernamePasswordAuthenticationFilter.class) + .addFilterBefore(exceptionHandlerFilter, JwtFilter.class) .build(); } diff --git a/tht-admin/src/test/java/com/tht/thtadmin/docs/UserManageDocs.java b/tht-admin/src/test/java/com/tht/thtadmin/docs/UserManageDocs.java index 72e24fd9..5d833c2f 100644 --- a/tht-admin/src/test/java/com/tht/thtadmin/docs/UserManageDocs.java +++ b/tht-admin/src/test/java/com/tht/thtadmin/docs/UserManageDocs.java @@ -19,7 +19,7 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.http.MediaType; @@ -42,7 +42,7 @@ @WebMvcTest(UserManageController.class) class UserManageDocs extends ControllerTestConfig { - @MockBean + @MockitoBean UserManageUseCase userManageUseCase; @Test diff --git a/tht-admin/src/test/java/com/tht/thtadmin/docs/config/TokenProviderConfig.java b/tht-admin/src/test/java/com/tht/thtadmin/docs/config/TokenProviderConfig.java index a7dfa5e9..3cac2508 100644 --- a/tht-admin/src/test/java/com/tht/thtadmin/docs/config/TokenProviderConfig.java +++ b/tht-admin/src/test/java/com/tht/thtadmin/docs/config/TokenProviderConfig.java @@ -3,13 +3,13 @@ import com.tht.domain.entity.administrator.AdministratorService; import com.tht.thtadmin.security.TokenProvider; import org.springframework.boot.test.context.TestConfiguration; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.context.annotation.Bean; @TestConfiguration public class TokenProviderConfig { - @MockBean + @MockitoBean AdministratorService userService; @Bean diff --git a/tht-apis/build.gradle b/tht-apis/build.gradle index d470647e..dc4bce21 100644 --- a/tht-apis/build.gradle +++ b/tht-apis/build.gradle @@ -9,6 +9,7 @@ plugins{ id 'com.epages.restdocs-api-spec' version "${restdocsApiSpecVersion}" //swagger generator 플러그인 추가 id 'org.hidetake.swagger.generator' version '2.18.2' + id 'org.jetbrains.kotlin.jvm' } bootJar { enabled = true } @@ -46,6 +47,7 @@ dependencies { implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.6.0' // https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind implementation 'com.fasterxml.jackson.core:jackson-databind' + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" } openapi3 { @@ -80,4 +82,10 @@ bootJar{ into "src/main/resources/static/docs/" } +} +repositories { + mavenCentral() +} +kotlin { + jvmToolchain(21) } \ No newline at end of file diff --git a/tht-apis/src/main/java/com/tht/thtapis/dev/DevController.kt b/tht-apis/src/main/java/com/tht/thtapis/dev/DevController.kt new file mode 100644 index 00000000..e36be15b --- /dev/null +++ b/tht-apis/src/main/java/com/tht/thtapis/dev/DevController.kt @@ -0,0 +1,38 @@ +package com.tht.thtapis.dev + +import com.tht.domain.entity.like.UserLikeRepository +import com.tht.domain.entity.user.repository.UserDailyFallingRepository +import lombok.RequiredArgsConstructor +import org.springframework.http.HttpStatus +import org.springframework.http.ResponseEntity +import org.springframework.security.core.Authentication +import org.springframework.web.bind.annotation.PostMapping +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RestController +import java.util.* + +@RestController +@RequestMapping("/dev") +@RequiredArgsConstructor +class DevController( + private val userLikeRepository: UserLikeRepository, + private val userDailyFallingRepository: UserDailyFallingRepository +) { + + @PostMapping("/like-and-dislike/reset") + fun resetLikeData(authentication: Authentication?): ResponseEntity { + val userUuid: String = authentication?.credentials.toString() + userLikeRepository.deleteAllByUserUuid(userUuid) + + return ResponseEntity.status(HttpStatus.NO_CONTENT).build() + } + + @PostMapping("/selected-talk-keywords/reset") + fun resetSelectedFallingKeyword(authentication: Authentication?): ResponseEntity { + val userUuid: String = authentication?.credentials.toString() + userDailyFallingRepository.deleteAllByUserUuid(userUuid) + + return ResponseEntity.status(HttpStatus.NO_CONTENT).build() + } + +} \ No newline at end of file diff --git a/tht-apis/src/main/java/com/tht/thtapis/security/SecurityConfiguration.java b/tht-apis/src/main/java/com/tht/thtapis/security/SecurityConfiguration.java index a134d975..394e8d3c 100644 --- a/tht-apis/src/main/java/com/tht/thtapis/security/SecurityConfiguration.java +++ b/tht-apis/src/main/java/com/tht/thtapis/security/SecurityConfiguration.java @@ -9,9 +9,12 @@ import org.springframework.http.HttpMethod; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import static org.springframework.security.config.Customizer.withDefaults; + @Configuration @EnableWebSecurity @RequiredArgsConstructor @@ -47,10 +50,9 @@ public class SecurityConfiguration { public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception { httpSecurity - .csrf().disable() - .httpBasic().disable() - .exceptionHandling(); - + .csrf(AbstractHttpConfigurer::disable) + .httpBasic(AbstractHttpConfigurer::disable) + .exceptionHandling(withDefaults()); return httpSecurity .authorizeHttpRequests( @@ -60,11 +62,9 @@ public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws .requestMatchers(HttpMethod.GET, "/ideal-types").permitAll() .requestMatchers(HttpMethod.GET, "/interests").permitAll() .anyRequest().authenticated() - - .and() - .addFilterBefore(jwtFilter, UsernamePasswordAuthenticationFilter.class) - .addFilterBefore(exceptionHandlerFilter, JwtFilter.class) ) + .addFilterBefore(jwtFilter, UsernamePasswordAuthenticationFilter.class) + .addFilterBefore(exceptionHandlerFilter, JwtFilter.class) .build(); } diff --git a/tht-apis/src/main/resources/application-test.yaml b/tht-apis/src/main/resources/application-test.yaml index 8d1b8ff1..2ff94751 100644 --- a/tht-apis/src/main/resources/application-test.yaml +++ b/tht-apis/src/main/resources/application-test.yaml @@ -1,6 +1,6 @@ jwt: token: - expire-length: '3600000' + expire-length: 3600000 secret-key: tht-secret-key spring: diff --git a/tht-apis/src/test/java/com/tht/thtapis/controller/UserControllerTest.java b/tht-apis/src/test/java/com/tht/thtapis/controller/UserControllerTest.java index 975c114e..3c4c1b1b 100644 --- a/tht-apis/src/test/java/com/tht/thtapis/controller/UserControllerTest.java +++ b/tht-apis/src/test/java/com/tht/thtapis/controller/UserControllerTest.java @@ -14,13 +14,13 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; @WebMvcTest(UserController.class) class UserControllerTest extends ControllerTestConfig { - @MockBean + @MockitoBean UserFacade userFacade; @WithCustomMockUser diff --git a/tht-apis/src/test/java/com/tht/thtapis/controller/UserJoinControllerTest.java b/tht-apis/src/test/java/com/tht/thtapis/controller/UserJoinControllerTest.java index 43699a15..682eb9a7 100644 --- a/tht-apis/src/test/java/com/tht/thtapis/controller/UserJoinControllerTest.java +++ b/tht-apis/src/test/java/com/tht/thtapis/controller/UserJoinControllerTest.java @@ -12,9 +12,10 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.http.MediaType; import org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.web.servlet.ResultActions; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; @@ -28,9 +29,9 @@ class UserJoinControllerTest extends ControllerTestConfig { private static final String DEFAULT_URL = "/users/join"; - @MockBean + @MockitoBean UserJoinFacade userJoinFacade; - @MockBean + @MockitoBean AgreementFacade agreementFacade; @Test diff --git a/tht-apis/src/test/java/com/tht/thtapis/controller/config/ControllerTestConfig.java b/tht-apis/src/test/java/com/tht/thtapis/controller/config/ControllerTestConfig.java index 447f8ff8..52ee3fe8 100644 --- a/tht-apis/src/test/java/com/tht/thtapis/controller/config/ControllerTestConfig.java +++ b/tht-apis/src/test/java/com/tht/thtapis/controller/config/ControllerTestConfig.java @@ -1,8 +1,5 @@ package com.tht.thtapis.controller.config; -import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.documentationConfiguration; -import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; - import com.fasterxml.jackson.databind.ObjectMapper; import com.tht.thtapis.security.TokenProvider; import org.junit.jupiter.api.BeforeEach; @@ -10,20 +7,23 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Import; import org.springframework.data.jpa.mapping.JpaMetamodelMappingContext; import org.springframework.restdocs.RestDocumentationContextProvider; import org.springframework.restdocs.RestDocumentationExtension; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.filter.CharacterEncodingFilter; +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.documentationConfiguration; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; + @AutoConfigureMockMvc @AutoConfigureRestDocs @Import({TokenProviderConfig.class}) -@MockBean(JpaMetamodelMappingContext.class) +//@MockitoBean(JpaMetamodelMappingContext.class) @ExtendWith({RestDocumentationExtension.class}) public abstract class ControllerTestConfig { diff --git a/tht-apis/src/test/java/com/tht/thtapis/controller/config/TokenProviderConfig.java b/tht-apis/src/test/java/com/tht/thtapis/controller/config/TokenProviderConfig.java index ff1258ab..c3d99cde 100644 --- a/tht-apis/src/test/java/com/tht/thtapis/controller/config/TokenProviderConfig.java +++ b/tht-apis/src/test/java/com/tht/thtapis/controller/config/TokenProviderConfig.java @@ -3,13 +3,13 @@ import com.tht.thtapis.security.TokenProvider; import com.tht.domain.entity.user.service.UserService; import org.springframework.boot.test.context.TestConfiguration; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.mockito.Mock; import org.springframework.context.annotation.Bean; @TestConfiguration public class TokenProviderConfig { - @MockBean + @Mock UserService userService; @Bean diff --git a/tht-apis/src/test/java/com/tht/thtapis/documentation/AgreementDocumentation.java b/tht-apis/src/test/java/com/tht/thtapis/documentation/AgreementDocumentation.java index 22adf810..652d2046 100644 --- a/tht-apis/src/test/java/com/tht/thtapis/documentation/AgreementDocumentation.java +++ b/tht-apis/src/test/java/com/tht/thtapis/documentation/AgreementDocumentation.java @@ -11,7 +11,7 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.http.MediaType; import org.springframework.restdocs.payload.JsonFieldType; import org.springframework.test.web.servlet.ResultActions; @@ -26,7 +26,7 @@ @WebMvcTest(UserController.class) public class AgreementDocumentation extends ControllerTestConfig { - @MockBean + @MockitoBean UserFacade userFacade; @Test diff --git a/tht-apis/src/test/java/com/tht/thtapis/documentation/ChatDocumentation.java b/tht-apis/src/test/java/com/tht/thtapis/documentation/ChatDocumentation.java index e6f1cbc5..6642ab02 100644 --- a/tht-apis/src/test/java/com/tht/thtapis/documentation/ChatDocumentation.java +++ b/tht-apis/src/test/java/com/tht/thtapis/documentation/ChatDocumentation.java @@ -24,8 +24,8 @@ import com.tht.thtapis.ui.ChatController; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.ResultActions; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; @@ -33,7 +33,7 @@ @WebMvcTest(ChatController.class) class ChatDocumentation extends ControllerTestConfig { - @MockBean + @MockitoBean ChatFacade chatFacade; @Test diff --git a/tht-apis/src/test/java/com/tht/thtapis/documentation/DailyFallingDocumentation.java b/tht-apis/src/test/java/com/tht/thtapis/documentation/DailyFallingDocumentation.java index 1fb2d4d4..0aad3641 100644 --- a/tht-apis/src/test/java/com/tht/thtapis/documentation/DailyFallingDocumentation.java +++ b/tht-apis/src/test/java/com/tht/thtapis/documentation/DailyFallingDocumentation.java @@ -14,7 +14,7 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.http.MediaType; import org.springframework.restdocs.payload.JsonFieldType; import org.springframework.test.web.servlet.ResultActions; @@ -32,7 +32,7 @@ @WebMvcTest(DailyFallingController.class) class DailyFallingDocumentation extends ControllerTestConfig { - @MockBean + @MockitoBean DailyFallingFacade dailyFallingFacade; @Test diff --git a/tht-apis/src/test/java/com/tht/thtapis/documentation/DevDocumentation.java b/tht-apis/src/test/java/com/tht/thtapis/documentation/DevDocumentation.java new file mode 100644 index 00000000..02236752 --- /dev/null +++ b/tht-apis/src/test/java/com/tht/thtapis/documentation/DevDocumentation.java @@ -0,0 +1,83 @@ +package com.tht.thtapis.documentation; + +import com.epages.restdocs.apispec.ResourceSnippetParameters; +import com.tht.domain.entity.like.UserLikeRepository; +import com.tht.domain.entity.user.repository.UserDailyFallingRepository; +import com.tht.thtapis.controller.config.ControllerTestConfig; +import com.tht.thtapis.dev.DevController; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.http.MediaType; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.web.servlet.ResultActions; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; + +import static com.epages.restdocs.apispec.MockMvcRestDocumentationWrapper.document; +import static com.epages.restdocs.apispec.ResourceDocumentation.resource; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.doNothing; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.post; +import static org.springframework.restdocs.operation.preprocess.Preprocessors.*; + +@WebMvcTest(DevController.class) +class DevDocumentation extends ControllerTestConfig { + + @MockitoBean + UserLikeRepository userLikeRepository; + @MockitoBean + UserDailyFallingRepository userDailyFallingRepository; + + @Test + @DisplayName("유저 좋아요 싫어요 선택 데이터 초기화 api documentation") + void resetLike() throws Exception { + + // Mock Repository 동작 정의 + doNothing().when(userLikeRepository).deleteAllByUserUuid(anyString()); + + //give + ResultActions resultActions = ControllerTestConfig.mockMvc.perform(post("/dev/like-and-dislike/reset") + .accept(MediaType.APPLICATION_JSON) + .contentType(MediaType.APPLICATION_JSON) + .header("Authorization", "Bearer {ACCESS_TOKEN}") + ) + .andDo(document("유저 좋아요 싫어요 선택 데이터 초기화 api", + preprocessRequest(prettyPrint()), + preprocessResponse(prettyPrint()), + resource(ResourceSnippetParameters.builder() + .tag("개발용") + .description("유저 좋아요 싫어요 선택 데이터 전부 삭제") + .responseFields() + .build()) + )); + + resultActions.andExpect(MockMvcResultMatchers.status().isNoContent()); + } + + @Test + @DisplayName("유저가 선택한 그날의 주제어 초기화 api documentation") + void resetSelectedTalkKeyword() throws Exception { + + // Mock Repository 동작 정의 + doNothing().when(userDailyFallingRepository).deleteAllByUserUuid(anyString()); + + //give + ResultActions resultActions = ControllerTestConfig.mockMvc.perform(post("/dev/selected-talk-keywords/reset") + .accept(MediaType.APPLICATION_JSON) + .contentType(MediaType.APPLICATION_JSON) + .header("Authorization", "Bearer {ACCESS_TOKEN}") + ) + .andDo(document("유저가 선택한 그날의 주제어 초기화 api", + preprocessRequest(prettyPrint()), + preprocessResponse(prettyPrint()), + resource(ResourceSnippetParameters.builder() + .tag("개발용") + .description("유저가 선택한 그날의 주제어 데이터 전부 삭제") + .responseFields() + .build()) + )); + + resultActions.andExpect(MockMvcResultMatchers.status().isNoContent()); + } + +} diff --git a/tht-apis/src/test/java/com/tht/thtapis/documentation/IdealTypeDocumentation.java b/tht-apis/src/test/java/com/tht/thtapis/documentation/IdealTypeDocumentation.java index 24228fb8..05fdd6d1 100644 --- a/tht-apis/src/test/java/com/tht/thtapis/documentation/IdealTypeDocumentation.java +++ b/tht-apis/src/test/java/com/tht/thtapis/documentation/IdealTypeDocumentation.java @@ -19,7 +19,7 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.http.MediaType; import org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders; import org.springframework.test.web.servlet.ResultActions; @@ -30,7 +30,7 @@ class IdealTypeDocumentation extends ControllerTestConfig { private static final String DEFAULT_URL = "/ideal-types"; - @MockBean + @MockitoBean IdealTypeFacade idealTypeFacade; @Test diff --git a/tht-apis/src/test/java/com/tht/thtapis/documentation/InquiryDocs.java b/tht-apis/src/test/java/com/tht/thtapis/documentation/InquiryDocs.java index 7f70fe48..36db7580 100644 --- a/tht-apis/src/test/java/com/tht/thtapis/documentation/InquiryDocs.java +++ b/tht-apis/src/test/java/com/tht/thtapis/documentation/InquiryDocs.java @@ -10,7 +10,7 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.ResultActions; @@ -24,7 +24,7 @@ @WebMvcTest(InquiryController.class) class InquiryDocs extends ControllerTestConfig { - @MockBean + @MockitoBean InquiryFacade inquiryFacade; @Test diff --git a/tht-apis/src/test/java/com/tht/thtapis/documentation/InterestDocumentation.java b/tht-apis/src/test/java/com/tht/thtapis/documentation/InterestDocumentation.java index 62b4476f..1bbc12d9 100644 --- a/tht-apis/src/test/java/com/tht/thtapis/documentation/InterestDocumentation.java +++ b/tht-apis/src/test/java/com/tht/thtapis/documentation/InterestDocumentation.java @@ -19,7 +19,7 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.http.MediaType; import org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders; import org.springframework.test.web.servlet.ResultActions; @@ -30,7 +30,7 @@ class InterestDocumentation extends ControllerTestConfig { private static final String DEFAULT_URL = "/interests"; - @MockBean + @MockitoBean InterestFacade interestFacade; @Test diff --git a/tht-apis/src/test/java/com/tht/thtapis/documentation/LikeDocumentation.java b/tht-apis/src/test/java/com/tht/thtapis/documentation/LikeDocumentation.java index 4fe9e917..fe85d9b2 100644 --- a/tht-apis/src/test/java/com/tht/thtapis/documentation/LikeDocumentation.java +++ b/tht-apis/src/test/java/com/tht/thtapis/documentation/LikeDocumentation.java @@ -1,24 +1,7 @@ package com.tht.thtapis.documentation; -import static com.epages.restdocs.apispec.ResourceDocumentation.parameterWithName; -import static com.epages.restdocs.apispec.ResourceDocumentation.resource; -import static org.mockito.ArgumentMatchers.anyInt; -import static org.mockito.BDDMockito.anyLong; -import static org.mockito.BDDMockito.anyString; -import static org.mockito.BDDMockito.when; -import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document; -import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get; -import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.post; -import static org.springframework.restdocs.operation.preprocess.Preprocessors.preprocessRequest; -import static org.springframework.restdocs.operation.preprocess.Preprocessors.preprocessResponse; -import static org.springframework.restdocs.operation.preprocess.Preprocessors.prettyPrint; -import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; - import com.epages.restdocs.apispec.ResourceSnippetParameters; import com.epages.restdocs.apispec.Schema; -import java.time.LocalDateTime; -import java.util.List; - import com.tht.thtapis.controller.config.ControllerTestConfig; import com.tht.thtapis.controller.config.WithCustomMockUser; import com.tht.thtapis.facade.like.LikeFacade; @@ -28,14 +11,27 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.MediaType; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; +import java.time.LocalDateTime; +import java.util.List; + +import static com.epages.restdocs.apispec.ResourceDocumentation.parameterWithName; +import static com.epages.restdocs.apispec.ResourceDocumentation.resource; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.BDDMockito.*; +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.post; +import static org.springframework.restdocs.operation.preprocess.Preprocessors.*; +import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; + @WebMvcTest(LikeController.class) class LikeDocumentation extends ControllerTestConfig { - @MockBean + @MockitoBean LikeFacade likeFacade; @DisplayName("유저 좋아요 api docs") diff --git a/tht-apis/src/test/java/com/tht/thtapis/documentation/MainDocumentation.java b/tht-apis/src/test/java/com/tht/thtapis/documentation/MainDocumentation.java index c3624eb5..4b0b71b3 100644 --- a/tht-apis/src/test/java/com/tht/thtapis/documentation/MainDocumentation.java +++ b/tht-apis/src/test/java/com/tht/thtapis/documentation/MainDocumentation.java @@ -20,7 +20,7 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.http.MediaType; import org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders; import org.springframework.test.web.servlet.ResultActions; @@ -29,7 +29,7 @@ @WebMvcTest(MainController.class) class MainDocumentation extends ControllerTestConfig { - @MockBean + @MockitoBean UserFacade userFacade; @Test diff --git a/tht-apis/src/test/java/com/tht/thtapis/documentation/SettingDocumentation.java b/tht-apis/src/test/java/com/tht/thtapis/documentation/SettingDocumentation.java index b89326a1..c1a7f141 100644 --- a/tht-apis/src/test/java/com/tht/thtapis/documentation/SettingDocumentation.java +++ b/tht-apis/src/test/java/com/tht/thtapis/documentation/SettingDocumentation.java @@ -12,7 +12,7 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.ResultActions; @@ -26,7 +26,7 @@ @WebMvcTest(SettingController.class) class SettingDocumentation extends ControllerTestConfig { - @MockBean + @MockitoBean SettingFacade settingFacade; @Test diff --git a/tht-apis/src/test/java/com/tht/thtapis/documentation/UserDocumentation.java b/tht-apis/src/test/java/com/tht/thtapis/documentation/UserDocumentation.java index 16db35ca..ed7ced93 100644 --- a/tht-apis/src/test/java/com/tht/thtapis/documentation/UserDocumentation.java +++ b/tht-apis/src/test/java/com/tht/thtapis/documentation/UserDocumentation.java @@ -18,9 +18,9 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.MediaType; import org.springframework.restdocs.payload.JsonFieldType; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.web.servlet.ResultActions; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; @@ -40,7 +40,7 @@ @WebMvcTest(UserController.class) class UserDocumentation extends ControllerTestConfig { - @MockBean + @MockitoBean UserFacade userFacade; @Test diff --git a/tht-apis/src/test/java/com/tht/thtapis/documentation/UserJoinDocumentation.java b/tht-apis/src/test/java/com/tht/thtapis/documentation/UserJoinDocumentation.java index ddf3f8ea..d6de6521 100644 --- a/tht-apis/src/test/java/com/tht/thtapis/documentation/UserJoinDocumentation.java +++ b/tht-apis/src/test/java/com/tht/thtapis/documentation/UserJoinDocumentation.java @@ -22,7 +22,7 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.http.MediaType; import org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders; import org.springframework.restdocs.payload.JsonFieldType; @@ -45,10 +45,10 @@ class UserJoinDocumentation extends ControllerTestConfig { private static final String DEFAULT_URL = "/users/join"; - @MockBean + @MockitoBean UserJoinFacade userJoinFacade; - @MockBean + @MockitoBean AgreementFacade agreementFacade; @Test diff --git a/tht-apis/src/test/java/com/tht/thtapis/documentation/UserLoginDocumentation.java b/tht-apis/src/test/java/com/tht/thtapis/documentation/UserLoginDocumentation.java index 9582ae81..b79615af 100644 --- a/tht-apis/src/test/java/com/tht/thtapis/documentation/UserLoginDocumentation.java +++ b/tht-apis/src/test/java/com/tht/thtapis/documentation/UserLoginDocumentation.java @@ -14,7 +14,7 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.http.MediaType; import org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders; import org.springframework.test.web.servlet.ResultActions; @@ -32,7 +32,7 @@ class UserLoginDocumentation extends ControllerTestConfig { private static final String DEFAULT_URL = "/users/login"; - @MockBean + @MockitoBean UserLoginFacade userLoginFacade; @Test diff --git a/tht-apis/src/test/java/com/tht/thtapis/documentation/UserLogoutDocumentation.java b/tht-apis/src/test/java/com/tht/thtapis/documentation/UserLogoutDocumentation.java index 6a7f01cb..aa64d6ca 100644 --- a/tht-apis/src/test/java/com/tht/thtapis/documentation/UserLogoutDocumentation.java +++ b/tht-apis/src/test/java/com/tht/thtapis/documentation/UserLogoutDocumentation.java @@ -9,7 +9,7 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.ResultActions; @@ -21,7 +21,7 @@ @WebMvcTest(UserLogoutController.class) class UserLogoutDocumentation extends ControllerTestConfig { - @MockBean + @MockitoBean private LogoutFacade logoutFacade; @Test diff --git a/tht-core/domain/build.gradle b/tht-core/domain/build.gradle index 28654c51..73ef2ecb 100644 --- a/tht-core/domain/build.gradle +++ b/tht-core/domain/build.gradle @@ -9,11 +9,12 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' - implementation 'com.querydsl:querydsl-core:5.0.0' - implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' - annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta" - annotationProcessor "jakarta.annotation:jakarta.annotation-api" - annotationProcessor "jakarta.persistence:jakarta.persistence-api" + def queryDslVersion = "6.1" + implementation("io.github.openfeign.querydsl:querydsl-core:$queryDslVersion") + implementation("io.github.openfeign.querydsl:querydsl-jpa:$queryDslVersion") + annotationProcessor("io.github.openfeign.querydsl:querydsl-apt:$queryDslVersion:jpa") + annotationProcessor("jakarta.annotation:jakarta.annotation-api") + annotationProcessor("jakarta.persistence:jakarta.persistence-api") //JWT implementation 'io.jsonwebtoken:jjwt-api:0.11.5' diff --git a/tht-core/domain/src/main/java/com/tht/domain/entity/like/UserLikeRepository.java b/tht-core/domain/src/main/java/com/tht/domain/entity/like/UserLikeRepository.java index f738246b..6cb84cb8 100644 --- a/tht-core/domain/src/main/java/com/tht/domain/entity/like/UserLikeRepository.java +++ b/tht-core/domain/src/main/java/com/tht/domain/entity/like/UserLikeRepository.java @@ -2,6 +2,7 @@ import com.tht.enums.user.LikeState; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.transaction.annotation.Transactional; import java.util.Optional; @@ -10,4 +11,7 @@ public interface UserLikeRepository extends JpaRepository, Optional findByUserUuidAndTargetUserUuidAndDailyFallingIdxAndLikeState( String userUuid, String targetUserUuid, long dailyFallingIdx, LikeState likeState); + + @Transactional + void deleteAllByUserUuid(String userUuid); } diff --git a/tht-core/domain/src/main/java/com/tht/domain/entity/user/repository/UserDailyFallingRepository.java b/tht-core/domain/src/main/java/com/tht/domain/entity/user/repository/UserDailyFallingRepository.java index 6fc41f31..7c2e3ade 100644 --- a/tht-core/domain/src/main/java/com/tht/domain/entity/user/repository/UserDailyFallingRepository.java +++ b/tht-core/domain/src/main/java/com/tht/domain/entity/user/repository/UserDailyFallingRepository.java @@ -3,8 +3,11 @@ import com.tht.domain.entity.dailyfalling.UserDailyFalling; import com.tht.domain.entity.user.repository.querydsl.UserDailyFallingCustomRepository; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.transaction.annotation.Transactional; public interface UserDailyFallingRepository extends JpaRepository, UserDailyFallingCustomRepository { + @Transactional + void deleteAllByUserUuid(String userUuid); } diff --git a/tht-core/domain/src/test/java/com/tht/domain/user/service/UserServiceTest.java b/tht-core/domain/src/test/java/com/tht/domain/user/service/UserServiceTest.java index 2cd3504a..1eac8796 100644 --- a/tht-core/domain/src/test/java/com/tht/domain/user/service/UserServiceTest.java +++ b/tht-core/domain/src/test/java/com/tht/domain/user/service/UserServiceTest.java @@ -99,7 +99,7 @@ void findUserByPhoneNumber_fail() { assertThatThrownBy(() -> userService.findByPhoneNumber("")) .isInstanceOf(UserCustomException.class) - .hasMessageContaining("존재하지 않는 유저 번호입니다."); + .hasMessageContaining(" 는 유효하지 않은 회원 전화번호 입니다."); } @Test