diff --git a/server/build.gradle.kts b/server/build.gradle.kts index f262216..779f928 100644 --- a/server/build.gradle.kts +++ b/server/build.gradle.kts @@ -23,8 +23,6 @@ repositories { mavenCentral() } - - dependencies { implementation("org.springframework.boot:spring-boot-starter-data-jpa") implementation("org.springframework.boot:spring-boot-starter-security") @@ -32,14 +30,15 @@ dependencies { implementation("org.springframework.boot:spring-boot-starter-web") implementation("org.springframework.boot:spring-boot-starter-actuator") implementation("org.springframework.boot:spring-boot-starter-log4j2") - implementation("org.projectlombok:lombok:1.18.20") + implementation("org.projectlombok:lombok:1.18.24") implementation("io.springfox:springfox-boot-starter:3.0.0") implementation("io.springfox:springfox-swagger-ui:3.0.0") implementation("com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.4") - implementation("com.lmax:disruptor:3.4.2") - implementation("io.jsonwebtoken:jjwt-api:0.11.2") + implementation("com.lmax:disruptor:3.4.4") + implementation("io.jsonwebtoken:jjwt-api:0.11.5") implementation("com.googlecode.json-simple:json-simple:1.1.1") implementation("org.springframework.boot:spring-boot-starter-data-redis") + implementation("com.google.code.findbugs:jsr305:3.0.2") modules { module("org.springframework.boot:spring-boot-starter-logging") { @@ -47,18 +46,14 @@ dependencies { } } - testImplementation("org.springframework.boot:spring-boot-starter-test") - testImplementation("org.springframework.security:spring-security-test") - testImplementation("org.junit.jupiter:junit-jupiter-api:5.8.1") - compileOnly("org.projectlombok:lombok") runtimeOnly("mysql:mysql-connector-java") - runtimeOnly("io.jsonwebtoken:jjwt-impl:0.11.2") - runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.11.2") + runtimeOnly("io.jsonwebtoken:jjwt-impl:0.11.5") + runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.11.5") annotationProcessor("org.projectlombok:lombok") annotationProcessor("org.springframework.boot:spring-boot-configuration-processor") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.8.1") + testImplementation("org.junit.jupiter:junit-jupiter-api:5.8.1") testImplementation("org.springframework.boot:spring-boot-starter-test") testImplementation("org.springframework.security:spring-security-test") } @@ -66,3 +61,28 @@ dependencies { tasks.withType { useJUnitPlatform() } + +sourceSets { + create("intTest") { + compileClasspath += sourceSets.main.get().output + runtimeClasspath += sourceSets.main.get().output + } +} + +val intTestImplementation by configurations.getting { + extendsFrom(configurations.implementation.get()) +} + +configurations["intTestRuntimeOnly"].extendsFrom(configurations.runtimeOnly.get()) +configurations["intTestImplementation"].extendsFrom(configurations.testImplementation.get()) + +val integrationTest = task("integrationTest") { + description = "Runs integration tests." + group = "verification" + + testClassesDirs = sourceSets["intTest"].output.classesDirs + classpath = sourceSets["intTest"].runtimeClasspath + shouldRunAfter("test") +} + +tasks.check { dependsOn(integrationTest) } diff --git a/server/src/test/java/com/ticketing/server/global/health/L7checkControllerTest.java b/server/src/intTest/java/com/ticketing/server/global/health/L7checkControllerTest.java similarity index 100% rename from server/src/test/java/com/ticketing/server/global/health/L7checkControllerTest.java rename to server/src/intTest/java/com/ticketing/server/global/health/L7checkControllerTest.java diff --git a/server/src/test/java/com/ticketing/server/global/redis/RefreshRedisRepositoryTest.java b/server/src/intTest/java/com/ticketing/server/global/redis/RefreshRedisRepositoryTest.java similarity index 100% rename from server/src/test/java/com/ticketing/server/global/redis/RefreshRedisRepositoryTest.java rename to server/src/intTest/java/com/ticketing/server/global/redis/RefreshRedisRepositoryTest.java diff --git a/server/src/test/java/com/ticketing/server/movie/domain/MovieTest.java b/server/src/intTest/java/com/ticketing/server/movie/domain/MovieTest.java similarity index 100% rename from server/src/test/java/com/ticketing/server/movie/domain/MovieTest.java rename to server/src/intTest/java/com/ticketing/server/movie/domain/MovieTest.java diff --git a/server/src/test/java/com/ticketing/server/movie/domain/repository/MovieRepositoryTest.java b/server/src/intTest/java/com/ticketing/server/movie/domain/repository/MovieRepositoryTest.java similarity index 100% rename from server/src/test/java/com/ticketing/server/movie/domain/repository/MovieRepositoryTest.java rename to server/src/intTest/java/com/ticketing/server/movie/domain/repository/MovieRepositoryTest.java diff --git a/server/src/intTest/java/com/ticketing/server/movie/domain/repository/MovieTimesRepositoryTest.java b/server/src/intTest/java/com/ticketing/server/movie/domain/repository/MovieTimesRepositoryTest.java new file mode 100644 index 0000000..912ff57 --- /dev/null +++ b/server/src/intTest/java/com/ticketing/server/movie/domain/repository/MovieTimesRepositoryTest.java @@ -0,0 +1,5 @@ +package com.ticketing.server.movie.domain.repository; + +public class MovieTimesRepositoryTest { + +} diff --git a/server/src/test/java/com/ticketing/server/movie/domain/repository/SeatRepositoryTest.java b/server/src/intTest/java/com/ticketing/server/movie/domain/repository/SeatRepositoryTest.java similarity index 100% rename from server/src/test/java/com/ticketing/server/movie/domain/repository/SeatRepositoryTest.java rename to server/src/intTest/java/com/ticketing/server/movie/domain/repository/SeatRepositoryTest.java diff --git a/server/src/test/java/com/ticketing/server/movie/domain/repository/TheaterRepositoryTest.java b/server/src/intTest/java/com/ticketing/server/movie/domain/repository/TheaterRepositoryTest.java similarity index 100% rename from server/src/test/java/com/ticketing/server/movie/domain/repository/TheaterRepositoryTest.java rename to server/src/intTest/java/com/ticketing/server/movie/domain/repository/TheaterRepositoryTest.java diff --git a/server/src/test/java/com/ticketing/server/movie/domain/repository/TicketRepositoryTest.java b/server/src/intTest/java/com/ticketing/server/movie/domain/repository/TicketRepositoryTest.java similarity index 100% rename from server/src/test/java/com/ticketing/server/movie/domain/repository/TicketRepositoryTest.java rename to server/src/intTest/java/com/ticketing/server/movie/domain/repository/TicketRepositoryTest.java diff --git a/server/src/intTest/java/com/ticketing/server/movie/service/TMDBServiceImplTest.java b/server/src/intTest/java/com/ticketing/server/movie/service/TMDBServiceImplTest.java new file mode 100644 index 0000000..4c7f558 --- /dev/null +++ b/server/src/intTest/java/com/ticketing/server/movie/service/TMDBServiceImplTest.java @@ -0,0 +1,94 @@ +package com.ticketing.server.movie.service; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestTemplate; + +@SpringBootTest +public class TMDBServiceImplTest { + + @Value("${tmdb.api-key}") + private String apiKey; + + @Value("${tmdb.read-access-token}") + private String readAccessToken; + + @Autowired + RestTemplate restTemplate; + + @Test + @DisplayName("TMDB Service Test - Get [Now Playing] movies") + void shouldAbleToGetMovieList() throws Exception { + // given + assertNotNull(apiKey); + assertNotNull(readAccessToken); + + ArrayList acceptCharset = new ArrayList<>(); + acceptCharset.add(StandardCharsets.UTF_8); + + HttpHeaders headers = new HttpHeaders(); + headers.setAcceptCharset(acceptCharset); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.setBearerAuth(readAccessToken); + + Map params = new HashMap<>(); + params.put("api_key", apiKey); + params.put("language", "ko"); + + HttpEntity request = new HttpEntity<>(headers); + + // when + ResponseEntity response = restTemplate.exchange( + "https://api.themoviedb.org/3/movie/now_playing?" + mapToUrlParam(params), + HttpMethod.GET, + request, + String.class + ); + +// JSONParser parser = new JSONParser(); +// Object obj = parser.parse(String.valueOf(response)); +// Object results = ((JSONObject) obj).get("results"); +// +// ArrayList movieList = new ArrayList<>(); +// +// ArrayList jsonMovieList = new ArrayList<>(); + + // then + assertTrue(response.getStatusCode().is2xxSuccessful()); + } + + private static String mapToUrlParam(Map params) { + StringBuffer paramData = new StringBuffer(); + + for (Map.Entry param : params.entrySet()) { + if (paramData.length() != 0) { + paramData.append('&'); + } + + paramData.append(param.getKey()); + paramData.append('='); + paramData.append(param.getValue()); + } + + return paramData.toString(); + } + +} + + diff --git a/server/src/test/java/com/ticketing/server/user/application/AuthControllerTest.java b/server/src/intTest/java/com/ticketing/server/user/application/AuthControllerTest.java similarity index 91% rename from server/src/test/java/com/ticketing/server/user/application/AuthControllerTest.java rename to server/src/intTest/java/com/ticketing/server/user/application/AuthControllerTest.java index 5b9d66f..856a3cc 100644 --- a/server/src/test/java/com/ticketing/server/user/application/AuthControllerTest.java +++ b/server/src/intTest/java/com/ticketing/server/user/application/AuthControllerTest.java @@ -31,6 +31,7 @@ class AuthControllerTest { private static final String LOGIN_URL = "/api/auth/token"; private static final String REGISTER_URL = "/api/users"; + private static final String USER_EMAIL = "ticketing@gmail.com"; @Autowired WebApplicationContext context; @@ -53,7 +54,7 @@ class AuthControllerTest { @DisplayName("로그인 인증 성공") void loginSuccess() throws Exception { // given - LoginRequest request = new LoginRequest("ticketing@gmail.com", "qwe123"); + LoginRequest request = new LoginRequest(USER_EMAIL, "qwe123"); // when ResultActions actions = mvc.perform(post(LOGIN_URL) @@ -69,7 +70,7 @@ class AuthControllerTest { @DisplayName("로그인 패스워드 인증 실패") void loginPasswordFail() throws Exception { // given - LoginRequest request = new LoginRequest("ticketing@gmail.com", "qwe1234"); + LoginRequest request = new LoginRequest(USER_EMAIL, "qwe1234"); // when ResultActions actions = mvc.perform(post(LOGIN_URL) @@ -81,10 +82,6 @@ class AuthControllerTest { .andExpect(status().isUnauthorized()); } - private String asJsonString(Object object) throws JsonProcessingException { - return objectMapper.writeValueAsString(object); - } - @BeforeEach void init() throws Exception { mvc = MockMvcBuilders @@ -92,7 +89,7 @@ class AuthControllerTest { .apply(springSecurity()) .build(); - SignUpRequest signUpRequest = new SignUpRequest("ticketing", "ticketing@gmail.com", "qwe123", "010-2240-7920"); + SignUpRequest signUpRequest = new SignUpRequest("ticketing", USER_EMAIL, "qwe123", "010-1234-5678"); mvc.perform(post(REGISTER_URL) .content(asJsonString(signUpRequest)) @@ -104,4 +101,8 @@ class AuthControllerTest { refreshRedisRepository.deleteAll(); } + private String asJsonString(Object object) throws JsonProcessingException { + return objectMapper.writeValueAsString(object); + } + } diff --git a/server/src/intTest/java/com/ticketing/server/user/application/UserControllerTest.java b/server/src/intTest/java/com/ticketing/server/user/application/UserControllerTest.java new file mode 100644 index 0000000..c0c2b6c --- /dev/null +++ b/server/src/intTest/java/com/ticketing/server/user/application/UserControllerTest.java @@ -0,0 +1,7 @@ +package com.ticketing.server.user.application; + +import static org.junit.jupiter.api.Assertions.*; + +class UserControllerTest { + +} diff --git a/server/src/intTest/resources/application.yml b/server/src/intTest/resources/application.yml new file mode 100644 index 0000000..2a8778c --- /dev/null +++ b/server/src/intTest/resources/application.yml @@ -0,0 +1,37 @@ +spring: + datasource: + url: jdbc:mysql://localhost:3306/ticketing_test?serverTimezone=Asia/Seoul&characterEncoding=UTF-8 + username: ENC(LowN1n4w0Ep/DqLD8+q5Bq6AXM4b8e3V) + password: ENC(OMvGcpZLpggFTiGNkqNe66Zq/SmJXF6o) + driver-class-name: com.mysql.cj.jdbc.Driver + redis: + host: localhost + port: 6379 + + jpa: + properties: + hibernate: + show_sql: true + format_sql: true + hibernate: + ddl-auto: create + + mvc: + pathmatch: + matching-strategy: ant_path_matcher + +jasypt: + encryptor: + bean: jasyptStringEncryptor + +jwt: + access-header: Authorization + refresh-header: REFRESH_TOKEN + prefix: Bearer + secret-key: Zi1sYWItdGlja2V0aW5nLXByb2plY3Qtc3ByaW5nLWJvb3Qtc2VjdXJpdHktand0LXNlY3JldC1rZXktZi1sYWItdGlja2V0aW5nLXByb2plY3Qtc3ByaW5nLWJvb3Qtc2VjdXJpdHktand0LXNlY3JldC1rZXkK + access-token-validity-in-seconds: 60 + refresh-token-validity-in-seconds: 259200 + +tmdb: + api-key: 0d1503b6dcbfe1c514299b5564c649b8 + read-access-token: eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiIwZDE1MDNiNmRjYmZlMWM1MTQyOTliNTU2NGM2NDliOCIsInN1YiI6IjYyOWYwODRlNzI2ZmIxMTA2NDA4MjI2NCIsInNjb3BlcyI6WyJhcGlfcmVhZCJdLCJ2ZXJzaW9uIjoxfQ.rs8KZea8QLyashILiggWFx2s46lgUtzo-xSWoDgE58A diff --git a/server/src/test/java/com/ticketing/server/ServerApplicationTests.java b/server/src/test/java/com/ticketing/server/ServerApplicationTests.java deleted file mode 100644 index 5214e7d..0000000 --- a/server/src/test/java/com/ticketing/server/ServerApplicationTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.ticketing.server; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class ServerApplicationTests { - - @Test - void contextLoads() { - } - -} diff --git a/server/src/test/java/com/ticketing/server/user/domain/repository/UserRepositoryTest.java b/server/src/test/java/com/ticketing/server/user/domain/repository/UserRepositoryTest.java deleted file mode 100644 index a767976..0000000 --- a/server/src/test/java/com/ticketing/server/user/domain/repository/UserRepositoryTest.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.ticketing.server.user.domain.repository; - -import static org.assertj.core.api.Assertions.assertThat; - -import com.ticketing.server.user.domain.User; -import com.ticketing.server.user.domain.UserGrade; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.transaction.annotation.Transactional; - -@SpringBootTest -@Transactional -class UserRepositoryTest { - - @Autowired - UserRepository userRepository; - - @Test - void 유저레포지토리테스트() { - // given - User user = new User("유저1", "email@gmail.com", "testPassword01", UserGrade.GUEST, "010-1234-5678"); - - // when - userRepository.save(user); - - // then - assertThat(user).isNotNull(); - } - -} diff --git a/server/src/test/resources/application.yml b/server/src/test/resources/application.yml index 0b37794..284de4a 100644 --- a/server/src/test/resources/application.yml +++ b/server/src/test/resources/application.yml @@ -1,28 +1,3 @@ -spring: - datasource: - url: jdbc:mysql://localhost:3306/ticketing_test?serverTimezone=Asia/Seoul&characterEncoding=UTF-8 - username: ENC(LowN1n4w0Ep/DqLD8+q5Bq6AXM4b8e3V) - password: ENC(OMvGcpZLpggFTiGNkqNe66Zq/SmJXF6o) - driver-class-name: com.mysql.cj.jdbc.Driver - redis: - host: localhost - port: 6379 - - jpa: - properties: - hibernate: - show_sql: true - format_sql: true - hibernate: - ddl-auto: create - - mvc: - pathmatch: - matching-strategy: ant_path_matcher - -jasypt: - encryptor: - bean: jasyptStringEncryptor jwt: access-header: Authorization