Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 10 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -37,17 +37,24 @@ dependencies {//todo: 안쓰는 의존성이나 deprecated된 의존성 제거
implementation 'org.hibernate.validator:hibernate-validator:8.0.1.Final'
implementation 'jakarta.annotation:jakarta.annotation-api:2.1.1'
implementation 'org.apache.commons:commons-lang3:3.12.0'
testImplementation 'org.mockito:mockito-core:3.3.3'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'io.micrometer:micrometer-registry-prometheus'
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'

// Lombok
compileOnly 'org.projectlombok:lombok:1.18.26'
annotationProcessor 'org.projectlombok:lombok'

// Test
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'com.h2database:h2:2.2.224'
testImplementation 'org.mockito:mockito-core:3.3.3'
testImplementation 'io.rest-assured:rest-assured:5.4.0'

implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
// Testcontainers
testImplementation 'org.testcontainers:testcontainers'
testImplementation 'org.testcontainers:junit-jupiter'
testImplementation 'org.testcontainers:mysql'

annotationProcessor(
'com.querydsl:querydsl-apt:5.0.0:jakarta',
'jakarta.persistence:jakarta.persistence-api:3.1.0',
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/secret
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.example.solidconnection.post.service.PostService;
import com.example.solidconnection.siteuser.domain.SiteUser;
import com.example.solidconnection.siteuser.repository.SiteUserRepository;
import com.example.solidconnection.support.TestContainerSpringBootTest;
import com.example.solidconnection.type.Gender;
import com.example.solidconnection.type.PostCategory;
import com.example.solidconnection.type.PreparationStatus;
Expand All @@ -16,8 +17,6 @@
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.test.context.ActiveProfiles;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
Expand All @@ -26,8 +25,7 @@

import static org.junit.jupiter.api.Assertions.assertEquals;

@SpringBootTest
@ActiveProfiles("test")
@TestContainerSpringBootTest
@DisplayName("게시글 좋아요 동시성 테스트")
class PostLikeCountConcurrencyTest {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.example.solidconnection.service.RedisService;
import com.example.solidconnection.siteuser.domain.SiteUser;
import com.example.solidconnection.siteuser.repository.SiteUserRepository;
import com.example.solidconnection.support.TestContainerSpringBootTest;
import com.example.solidconnection.type.Gender;
import com.example.solidconnection.type.PostCategory;
import com.example.solidconnection.type.PreparationStatus;
Expand All @@ -17,8 +18,6 @@
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.test.context.ActiveProfiles;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
Expand All @@ -28,8 +27,7 @@
import static com.example.solidconnection.type.RedisConstants.*;
import static org.junit.jupiter.api.Assertions.assertEquals;

@SpringBootTest
@ActiveProfiles("test")
@TestContainerSpringBootTest
@DisplayName("게시글 조회수 동시성 테스트")
public class PostViewCountConcurrencyTest {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,15 @@
import com.example.solidconnection.application.service.ApplicationQueryService;
import com.example.solidconnection.siteuser.domain.SiteUser;
import com.example.solidconnection.siteuser.repository.SiteUserRepository;
import com.example.solidconnection.support.TestContainerSpringBootTest;
import com.example.solidconnection.type.Gender;
import com.example.solidconnection.type.PreparationStatus;
import com.example.solidconnection.type.Role;
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.data.redis.core.RedisTemplate;
import org.springframework.test.context.ActiveProfiles;

import java.util.Arrays;
import java.util.Collections;
Expand All @@ -22,8 +21,7 @@
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

@SpringBootTest
@ActiveProfiles("test")
@TestContainerSpringBootTest
@DisplayName("ThunderingHerd 테스트")
public class ThunderingHerdTest {
@Autowired
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.example.solidconnection.database;

import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
Expand All @@ -17,6 +18,7 @@
import static org.assertj.core.api.Assertions.assertThatCode;
import static org.junit.jupiter.api.Assertions.assertAll;

@Disabled
@AutoConfigureTestDatabase(connection = EmbeddedDatabaseConnection.H2, replace = AutoConfigureTestDatabase.Replace.ANY)
@ActiveProfiles("test")
@DataJpaTest
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.example.solidconnection.database;

import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
Expand All @@ -9,6 +10,7 @@

import static org.assertj.core.api.Assertions.assertThat;

@Disabled
@ActiveProfiles("test")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class RedisConnectionTest {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
package com.example.solidconnection.e2e;

import com.example.solidconnection.support.DatabaseClearExtension;
import com.example.solidconnection.support.TestContainerSpringBootTest;
import io.restassured.RestAssured;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.test.context.ActiveProfiles;

@TestContainerSpringBootTest
@ExtendWith(DatabaseClearExtension.class)
@ActiveProfiles("test")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
abstract class BaseEndToEndTest {

@LocalServerPort
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ class SignUpTest extends BaseEndToEndTest {
assertAll(
"관심 지역과 나라 정보를 저장한다.",
() -> assertThat(interestedRegions).containsExactlyInAnyOrder(region),
() -> assertThat(interestedCountries).containsExactlyElementsOf(countries)
() -> assertThat(interestedCountries).containsExactlyInAnyOrderElementsOf(countries)
);

assertThat(redisTemplate.opsForValue().get(TokenType.REFRESH.addTokenPrefixToSubject(email)))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.example.solidconnection.repositories.CountryRepository;
import com.example.solidconnection.repositories.RegionRepository;
import com.example.solidconnection.support.DatabaseClearExtension;
import com.example.solidconnection.support.TestContainerSpringBootTest;
import com.example.solidconnection.type.LanguageTestType;
import com.example.solidconnection.university.domain.LanguageRequirement;
import com.example.solidconnection.university.domain.University;
Expand All @@ -17,18 +18,15 @@
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.test.context.ActiveProfiles;

import java.util.HashSet;

import static com.example.solidconnection.type.SemesterAvailableForDispatch.ONE_SEMESTER;
import static com.example.solidconnection.type.TuitionFeeType.HOME_UNIVERSITY_PAYMENT;

@ExtendWith(DatabaseClearExtension.class)
@ActiveProfiles("test")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@TestContainerSpringBootTest
abstract class UniversityDataSetUpEndToEndTest {

public static Region 영미권;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,17 +32,18 @@ public void clear() {
}

private void truncate() {
em.createNativeQuery("SET REFERENTIAL_INTEGRITY FALSE").executeUpdate();
em.createNativeQuery("SET FOREIGN_KEY_CHECKS = 0").executeUpdate();
getTruncateQueries().forEach(query -> em.createNativeQuery(query).executeUpdate());
em.createNativeQuery("SET REFERENTIAL_INTEGRITY TRUE").executeUpdate();
em.createNativeQuery("SET FOREIGN_KEY_CHECKS = 1").executeUpdate();
}

@SuppressWarnings("unchecked")
private List<String> getTruncateQueries() {
String sql = """
SELECT Concat('TRUNCATE TABLE ', TABLE_NAME, ' RESTART IDENTITY', ';') AS q
SELECT CONCAT('TRUNCATE TABLE ', TABLE_NAME, ';') AS q
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'PUBLIC'
WHERE TABLE_SCHEMA = (SELECT DATABASE())
AND TABLE_TYPE = 'BASE TABLE'
""";

return em.createNativeQuery(sql).getResultList();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.example.solidconnection.support;

import jakarta.annotation.PostConstruct;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;
import org.testcontainers.containers.MySQLContainer;
import org.testcontainers.junit.jupiter.Container;

import javax.sql.DataSource;

@TestConfiguration
public class MySQLTestContainer {

@Container
private static final MySQLContainer<?> CONTAINER = new MySQLContainer<>("mysql:8.0");

@Bean
public DataSource dataSource() {
return DataSourceBuilder.create()
.url(CONTAINER.getJdbcUrl())
.username(CONTAINER.getUsername())
.password(CONTAINER.getPassword())
.driverClassName(CONTAINER.getDriverClassName())
.build();
}

@PostConstruct
void startContainer() {
if (!CONTAINER.isRunning()) {
CONTAINER.start();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.example.solidconnection.support;

import jakarta.annotation.PostConstruct;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.test.context.DynamicPropertyRegistry;
import org.springframework.test.context.DynamicPropertySource;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.junit.jupiter.Container;

@TestConfiguration
public class RedisTestContainer {

@Container
private static final GenericContainer<?> CONTAINER = new GenericContainer<>("redis:7.0");

@DynamicPropertySource
static void redisProperties(DynamicPropertyRegistry registry) {
registry.add("spring.redis.host", CONTAINER::getHost);
registry.add("spring.redis.port", CONTAINER::getFirstMappedPort);
}

@PostConstruct
void startContainer() {
if (!CONTAINER.isRunning()) {
CONTAINER.start();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.example.solidconnection.support;

import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.context.annotation.Import;
import org.springframework.test.context.ActiveProfiles;
import org.testcontainers.junit.jupiter.Testcontainers;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@ActiveProfiles("test")
@Testcontainers
@Import(MySQLTestContainer.class)
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestContainerDataJpaTest {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.example.solidconnection.support;

import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Import;
import org.springframework.test.context.ActiveProfiles;
import org.testcontainers.junit.jupiter.Testcontainers;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@ActiveProfiles("test")
@Testcontainers
@Import({MySQLTestContainer.class, RedisTestContainer.class})
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestContainerSpringBootTest {
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.example.solidconnection.post.repository.PostRepository;
import com.example.solidconnection.siteuser.domain.SiteUser;
import com.example.solidconnection.siteuser.repository.SiteUserRepository;
import com.example.solidconnection.support.TestContainerDataJpaTest;
import com.example.solidconnection.type.Gender;
import com.example.solidconnection.type.PostCategory;
import com.example.solidconnection.type.PreparationStatus;
Expand All @@ -16,16 +17,13 @@
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.transaction.annotation.Transactional;

import static com.example.solidconnection.custom.exception.ErrorCode.INVALID_BOARD_CODE;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.*;

@DataJpaTest
@ActiveProfiles("test")
@TestContainerDataJpaTest
@DisplayName("게시판 레포지토리 테스트")
class BoardRepositoryTest {
@Autowired
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import com.example.solidconnection.post.repository.PostRepository;
import com.example.solidconnection.siteuser.domain.SiteUser;
import com.example.solidconnection.siteuser.repository.SiteUserRepository;
import com.example.solidconnection.support.TestContainerDataJpaTest;
import com.example.solidconnection.type.Gender;
import com.example.solidconnection.type.PostCategory;
import com.example.solidconnection.type.PreparationStatus;
Expand All @@ -17,8 +18,6 @@
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 java.util.List;
Expand All @@ -28,9 +27,7 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;


@SpringBootTest
@ActiveProfiles("dev")
@TestContainerDataJpaTest
@DisplayName("댓글 레포지토리 테스트")
class CommentRepositoryTest {
@Autowired
Expand Down
Loading