diff --git a/src/main/resources/templates/component/button.html b/src/main/resources/templates/component/button.html index b93184a..80db916 100644 --- a/src/main/resources/templates/component/button.html +++ b/src/main/resources/templates/component/button.html @@ -4,32 +4,25 @@
-
- - - 홈페이지 바로가기 - - -
+ + + + +
+ + 홈페이지 바로가기 + +
diff --git a/src/main/resources/templates/component/copyright.html b/src/main/resources/templates/component/copyright.html index 96e4ca9..3973ad5 100644 --- a/src/main/resources/templates/component/copyright.html +++ b/src/main/resources/templates/component/copyright.html @@ -3,18 +3,14 @@ -
- -
- \ No newline at end of file + diff --git a/src/main/resources/templates/component/interviewDateInfo.html b/src/main/resources/templates/component/interviewDateInfo.html index eae686d..c2769b5 100644 --- a/src/main/resources/templates/component/interviewDateInfo.html +++ b/src/main/resources/templates/component/interviewDateInfo.html @@ -24,12 +24,8 @@
-
-
+
 :  -
+ 시간 -
-
+
- \ No newline at end of file + diff --git a/src/main/resources/templates/component/recruit.html b/src/main/resources/templates/component/recruit.html index 02f25f8..19a05a1 100644 --- a/src/main/resources/templates/component/recruit.html +++ b/src/main/resources/templates/component/recruit.html @@ -11,8 +11,8 @@ } -
-
+
@ceos.sinchon 에도 다양한 리쿠르팅 관련 정보를 제공하고 있으니 참고해주세요!

-
+
 
- \ No newline at end of file + diff --git a/src/main/resources/templates/component/recruitButton.html b/src/main/resources/templates/component/recruitButton.html index dbf614b..3524d7c 100644 --- a/src/main/resources/templates/component/recruitButton.html +++ b/src/main/resources/templates/component/recruitButton.html @@ -4,32 +4,25 @@
-
- - - 지원하기 - - -
+ + + + +
+ + 지원하기 + +
diff --git a/src/main/resources/templates/component/recruitGreeting.html b/src/main/resources/templates/component/recruitGreeting.html index a070e7d..65dc44b 100644 --- a/src/main/resources/templates/component/recruitGreeting.html +++ b/src/main/resources/templates/component/recruitGreeting.html @@ -9,7 +9,7 @@ box-sizing: border-box; border-radius: 10px; "> -
+
 
-
-
CEOS
- \ No newline at end of file + diff --git a/src/main/resources/templates/sendApplicationMail.html b/src/main/resources/templates/sendApplicationMail.html index 45714f7..ef7256b 100644 --- a/src/main/resources/templates/sendApplicationMail.html +++ b/src/main/resources/templates/sendApplicationMail.html @@ -5,51 +5,85 @@ > - - - + + + CEOS Application - -
-
title
-
divider
-
greeting
-
-
uuid
-
divider
-
uuid
-
divider
-
school
-
divider
-
ceos question
-
divider
-
common question
-
divider
-
part question
-
divider
-
part question
-
-
- button -
-
-
copyright
-
+ + + + + +
+ + + + + +
diff --git a/src/main/resources/templates/sendRecruitMail.html b/src/main/resources/templates/sendRecruitMail.html index 47747e6..bb641ae 100644 --- a/src/main/resources/templates/sendRecruitMail.html +++ b/src/main/resources/templates/sendRecruitMail.html @@ -5,40 +5,73 @@ > - - - + + + CEOS Recruitment - -
-
title
-
divider
-
greeting
-
-
recruit
-
divider
-
-
- button -
-
-
copyright
-
+ + + + + +
+ + + + + +
- \ No newline at end of file + diff --git a/src/test/java/ceos/backend/infra/ses/ApplicationMailTemplateTest.java b/src/test/java/ceos/backend/infra/ses/ApplicationMailTemplateTest.java new file mode 100644 index 0000000..679dcbe --- /dev/null +++ b/src/test/java/ceos/backend/infra/ses/ApplicationMailTemplateTest.java @@ -0,0 +1,75 @@ +package ceos.backend.infra.ses; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.List; +import java.util.Locale; +import java.util.Map; +import org.junit.jupiter.api.Test; +import org.thymeleaf.context.Context; +import org.thymeleaf.spring6.SpringTemplateEngine; +import org.thymeleaf.templatemode.TemplateMode; +import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver; + +class ApplicationMailTemplateTest { + + @Test + void rendersFixedWidthApplicationMailForClientScaling() { + ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver(); + templateResolver.setPrefix("templates/"); + templateResolver.setSuffix(".html"); + templateResolver.setTemplateMode(TemplateMode.HTML); + templateResolver.setCharacterEncoding("UTF-8"); + + SpringTemplateEngine templateEngine = new SpringTemplateEngine(); + templateEngine.setTemplateResolver(templateResolver); + + Context context = new Context(Locale.KOREAN); + context.setVariable("greetInfo", Map.of("name", "지원자", "generation", "24")); + context.setVariable("uuidInfo", Map.of("name", "지원자", "uuid", "CEOS-TEST-UUID")); + context.setVariable( + "personalInfo", + Map.of( + "name", "지원자", + "gender", "여성", + "birth", "2000-01-01", + "email", "applicant@example.com", + "phoneNumber", "010-0000-0000")); + context.setVariable( + "schoolInfo", + Map.of("university", "세오스대학교", "major", "컴퓨터공학", "semestersLeftNumber", "2")); + context.setVariable( + "ceosQuestionInfo", + Map.of( + "otDate", "2026-09-02", + "demodayDate", "2027-02-06", + "otherActivities", "학업")); + context.setVariable( + "commonQuestionInfo", + Map.of("questions", List.of("1 : 공통 질문"), "answers", List.of("공통 답변"))); + context.setVariable( + "partQuestionInfo", + Map.of( + "part", "개발", + "questions", List.of("2 : 파트 질문"), + "answers", List.of("파트 답변"))); + context.setVariable( + "interviewDateInfo", + Map.of( + "date", List.of("8월 28일 (금)"), + "notAvailabletime", List.of(List.of("19:00", "19:30")))); + + String html = templateEngine.process("sendApplicationMail", context); + + assertThat(html) + .contains("name=\"viewport\" content=\"width=680\"") + .contains("class=\"email-container\"") + .contains("width=\"680\"") + .contains("style=\"width: 680px; margin: 0 auto;\"") + .contains("CEOS-TEST-UUID", "공통 답변", "파트 답변", "19:30") + .doesNotContain("width=device-width") + .doesNotContain("display: flex") + .doesNotContain("width: fit-content"); + assertThat(html.indexOf("24<", "기 리크루팅을 시작합니다!") + .doesNotContain("width=device-width") + .doesNotContain("@media only screen") + .doesNotContain("max-width: 720px") + .doesNotContain("display: flex") + .doesNotContain("width: fit-content"); + assertThat(html) + .contains("height=\"26\"") + .doesNotContain("width=\"82\""); + assertThat(html.indexOf("