Skip to content

Commit d918801

Browse files
committed
[#255]; test: 회귀 테스트되도록 수정
assertThat이 없으면 어떤 값이 나오든 테스트는 성공합니다. 분석 스크립트와 회귀 테스트는 다릅니다. 아래처럼 수정하면 실제 회귀 방지 효과가 생깁니다 라는 코드리뷰 반영
1 parent 16aaf09 commit d918801

1 file changed

Lines changed: 18 additions & 15 deletions

File tree

src/test/kotlin/com/yourssu/scouter/common/implement/support/mail/DevDbMailEncodingTest.kt

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@ import com.yourssu.scouter.common.implement.domain.mail.MailRepository
55
import com.yourssu.scouter.common.implement.domain.mail.MimeMessageBuilderResolver
66
import jakarta.mail.Session
77
import jakarta.mail.internet.MimeMessage
8+
import org.assertj.core.api.Assertions.assertThat
9+
import org.junit.jupiter.api.Assumptions.assumeTrue
810
import org.junit.jupiter.api.Test
11+
import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable
912
import org.springframework.beans.factory.annotation.Autowired
1013
import org.springframework.boot.test.context.SpringBootTest
1114
import org.springframework.test.context.ActiveProfiles
@@ -19,6 +22,7 @@ import java.util.Properties
1922

2023
@SpringBootTest
2124
@ActiveProfiles("local", "local-dev-db")
25+
@EnabledIfEnvironmentVariable(named = "DB_URL", matches = ".+")
2226
@Suppress("NonAsciiCharacters")
2327
class DevDbMailEncodingTest(
2428
@Autowired private val mailRepository: MailRepository,
@@ -63,16 +67,19 @@ class DevDbMailEncodingTest(
6367
}
6468
}
6569

70+
/**
71+
* dev DB에 존재하는 샘플 메일(197, 199)로 MimeMessage 제목 인코딩이 UTF-8로 정상인지 검증.
72+
* 해당 mailId가 DB에 없으면(CI 등) 테스트는 스킵된다.
73+
*/
6674
@Test
67-
fun `dev DB mailId 197과 199의 MimeMessage Subject 인코딩 비교`() {
68-
val ids = listOf(197L, 199L)
75+
fun `dev DB 샘플 mailId로 MimeMessage Subject UTF-8 인코딩 회귀 검증`() {
76+
val ids = listOf(197L, 199L) // dev DB 전용 샘플 ID
6977
ids.forEach { id ->
7078
val mail = mailRepository.findById(id)
71-
?: error("mailId=$id 를 찾을 수 없습니다.")
79+
assumeTrue(mail != null, "mailId=$id not found; this test requires dev DB with sample mails 197, 199")
80+
val m = mail!!
7281

73-
println("=== mailId=$id DB 문자열 subject=[${mail.mailSubject}] ===")
74-
75-
val mailData = MailData.from(mail)
82+
val mailData = MailData.from(m)
7683

7784
val props = Properties().apply {
7885
put("mail.smtp.auth", "true")
@@ -86,20 +93,16 @@ class DevDbMailEncodingTest(
8693
val builder = mimeMessageBuilderResolver.resolve(mailData)
8794
val message: MimeMessage = builder.build(mailData, session)
8895

89-
// JavaMail이 디코딩해서 보여주는 Subject
90-
println("MimeMessage.getSubject() for mailId=$id -> [${message.subject}]")
96+
// 회귀 검증: JavaMail 디코딩 결과가 DB 제목과 동일해야 함
97+
assertThat(message.subject).isEqualTo(m.mailSubject)
9198

92-
// Raw MIME 헤더에서 Subject 라인만 출력
9399
val baos = ByteArrayOutputStream()
94100
message.writeTo(baos)
95-
val raw = baos.toString(Charsets.ISO_8859_1) // MIME 원문은 ISO-8859-1로 보는 게 관례
101+
val raw = baos.toString(Charsets.ISO_8859_1)
96102
val subjectHeader = raw.lineSequence().firstOrNull { it.startsWith("Subject:") }
97-
println("Raw Subject header for mailId=$id -> $subjectHeader")
98103

99-
// Gmail에 보내는 것과 동일한 Base64 URL 인코딩 문자열도 참고용
100-
val encoded = Base64.getUrlEncoder().encodeToString(baos.toByteArray())
101-
println("Encoded length for mailId=$id = ${encoded.length}")
102-
println()
104+
// 회귀 검증: Raw Subject가 RFC 2047 UTF-8 B 인코딩 형태여야 함 (mojibake 방지)
105+
assertThat(subjectHeader).isNotNull().contains("=?UTF-8?B?")
103106
}
104107
}
105108
}

0 commit comments

Comments
 (0)