@@ -10,12 +10,11 @@ import org.testcontainers.utility.DockerImageName
1010import java.sql.DriverManager
1111
1212/* *
13- * Flyway V2 마이그레이션( mail_reservation.status 컬럼 추가 )이 MySQL에서 정상 동작하는지 검증한다.
14- * 사전조건: mail_reservation 테이블이 존재해야 함 (baseline 또는 Hibernate로 생성된 스키마)
13+ * Flyway V2·V3 마이그레이션이 MySQL에서 정상 동작하는지 검증한다.
14+ * - V2: mail_reservation.status 컬럼 추가 및 기존 데이터 보정
15+ * - V3: member.state ENUM에 COMPLETED 추가 (member 테이블 필요)
16+ * 사전조건: mail_reservation·member 테이블을 테스트에서 생성 후 Flyway 전체 실행(최신까지 적용).
1517 * Docker 필요. Docker 없으면 스킵됨.
16- *
17- * 주의: V1 migration SQL이 없어 테스트에서 DDL로 테이블을 직접 생성한다.
18- * V1에서 mail_reservation 컬럼 구조가 변경되면 이 테스트의 DDL도 함께 수정해야 한다.
1918 */
2019@Testcontainers(disabledWithoutDocker = true )
2120@Suppress(" NonAsciiCharacters" )
@@ -37,9 +36,10 @@ class FlywayMailReservationMigrationTest {
3736 val username = mysql.username
3837 val password = mysql.password
3938
40- // 1. 사전조건: mail_reservation 테이블만 생성 (마이그레이션 대상만 검증 )
39+ // 1. 사전조건: V2·V3 마이그레이션에 필요한 테이블만 생성 (실무와 동일하게 최신 마이그레이션 전부 적용 )
4140 DriverManager .getConnection(jdbcUrl, username, password).use { conn ->
4241 conn.createStatement().use { stmt ->
42+ // V2 대상
4343 stmt.execute(
4444 """
4545 CREATE TABLE IF NOT EXISTS mail_reservation (
@@ -49,17 +49,25 @@ class FlywayMailReservationMigrationTest {
4949 )
5050 """ .trimIndent(),
5151 )
52- // 과거 예약 1건, 미래 예약 1건 삽입 (mail_id는 FK 없음)
5352 stmt.execute(
5453 " INSERT INTO mail_reservation (mail_id, reservation_time) VALUES (1, DATE_SUB(UTC_TIMESTAMP(), INTERVAL 1 HOUR))" ,
5554 )
5655 stmt.execute(
5756 " INSERT INTO mail_reservation (mail_id, reservation_time) VALUES (1, DATE_ADD(UTC_TIMESTAMP(), INTERVAL 1 HOUR))" ,
5857 )
58+ // V3 대상: member 테이블 (V3 적용 전 state ENUM)
59+ stmt.execute(
60+ """
61+ CREATE TABLE IF NOT EXISTS member (
62+ id BIGINT AUTO_INCREMENT PRIMARY KEY,
63+ state ENUM('ACTIVE', 'INACTIVE', 'GRADUATED', 'WITHDRAWN') NOT NULL
64+ )
65+ """ .trimIndent(),
66+ )
5967 }
6068 }
6169
62- // 2. Flyway 실행 (baseline-on-migrate: true, baseline-version: 1 )
70+ // 2. Flyway 실행 — target 제한 없이 최신까지 전부 적용 (실무와 동일 )
6371 val flyway =
6472 Flyway .configure()
6573 .dataSource(jdbcUrl, username, password)
0 commit comments