diff --git a/backend/src/test/java/com/woowacourse/zzimkkong/DatabaseCleaner.java b/backend/src/test/java/com/woowacourse/zzimkkong/DatabaseCleaner.java new file mode 100644 index 000000000..a880ccec0 --- /dev/null +++ b/backend/src/test/java/com/woowacourse/zzimkkong/DatabaseCleaner.java @@ -0,0 +1,39 @@ +package com.woowacourse.zzimkkong; + +import org.springframework.beans.factory.InitializingBean; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import java.util.List; +import java.util.Locale; +import java.util.stream.Collectors; + +@Component +@Profile("test") +public class DatabaseCleaner implements InitializingBean { + @PersistenceContext + private EntityManager entityManager; + + private List tableNames; + + @Override + public void afterPropertiesSet() { + tableNames = entityManager.getMetamodel().getEntities().stream() + .map(entry -> entry.getName().toLowerCase(Locale.ROOT)) + .collect(Collectors.toList()); + } + + @Transactional + public void execute() { + entityManager.flush(); + entityManager.createNativeQuery("SET REFERENTIAL_INTEGRITY FALSE").executeUpdate(); + for (String tableName : tableNames) { + entityManager.createNativeQuery("TRUNCATE TABLE " + tableName).executeUpdate(); + entityManager.createNativeQuery("ALTER TABLE " + tableName + " ALTER COLUMN id RESTART WITH 1").executeUpdate(); + } + entityManager.createNativeQuery("SET REFERENTIAL_INTEGRITY TRUE").executeUpdate(); + } +} diff --git a/backend/src/test/java/com/woowacourse/zzimkkong/controller/AcceptanceTest.java b/backend/src/test/java/com/woowacourse/zzimkkong/controller/AcceptanceTest.java index 0787f7bf2..3fe2cfd62 100644 --- a/backend/src/test/java/com/woowacourse/zzimkkong/controller/AcceptanceTest.java +++ b/backend/src/test/java/com/woowacourse/zzimkkong/controller/AcceptanceTest.java @@ -1,5 +1,6 @@ package com.woowacourse.zzimkkong.controller; +import com.woowacourse.zzimkkong.DatabaseCleaner; import com.woowacourse.zzimkkong.dto.map.MapCreateUpdateRequest; import com.woowacourse.zzimkkong.dto.member.LoginRequest; import com.woowacourse.zzimkkong.dto.member.MemberSaveRequest; @@ -12,6 +13,7 @@ import io.restassured.RestAssured; import io.restassured.builder.RequestSpecBuilder; import io.restassured.specification.RequestSpecification; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -22,7 +24,6 @@ import org.springframework.restdocs.RestDocumentationContextProvider; import org.springframework.restdocs.RestDocumentationExtension; import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit.jupiter.SpringExtension; @@ -38,7 +39,6 @@ import static org.springframework.restdocs.restassured3.RestAssuredRestDocumentation.documentationConfiguration; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @ExtendWith({RestDocumentationExtension.class, SpringExtension.class}) @AutoConfigureRestDocs @ActiveProfiles("test") @@ -85,6 +85,9 @@ class AcceptanceTest { @LocalServerPort int port; + @Autowired + private DatabaseCleaner databaseCleaner; + @MockBean private StorageUploader storageUploader; @@ -111,4 +114,9 @@ void setUp(RestDocumentationContextProvider restDocumentation) { given(storageUploader.upload(anyString(), any(File.class))) .willReturn(MAP_IMAGE_URL); } + + @AfterEach + void deleteAll() { + databaseCleaner.execute(); + } } diff --git a/backend/src/test/java/com/woowacourse/zzimkkong/controller/AdminControllerTest.java b/backend/src/test/java/com/woowacourse/zzimkkong/controller/AdminControllerTest.java index 3c64727d7..2d51795b1 100644 --- a/backend/src/test/java/com/woowacourse/zzimkkong/controller/AdminControllerTest.java +++ b/backend/src/test/java/com/woowacourse/zzimkkong/controller/AdminControllerTest.java @@ -46,7 +46,6 @@ class AdminControllerTest extends AcceptanceTest { .enabledDayOfWeek(BE_ENABLED_DAY_OF_WEEK) .build(); private static final Space BE = Space.builder() - .id(1L) .name(BE_NAME) .color(BE_COLOR) .map(LUTHER) @@ -155,7 +154,6 @@ void getReservations() { SALLY_DESCRIPTION); saveReservation(beReservationApi, newReservationCreateUpdateWithPasswordRequest); Reservation reservation = Reservation.builder() - .id(1L) .startTime(newReservationCreateUpdateWithPasswordRequest.getStartDateTime()) .endTime(newReservationCreateUpdateWithPasswordRequest.getEndDateTime()) .userName(newReservationCreateUpdateWithPasswordRequest.getName())