feat: 채널 표시명/내부명 규칙 추가
@bd45d8a1e2ad50983da9acc4addfc5ae7f9302ab
+++ src/main/java/kr/itn/itnhub/provision/ChannelKind.java
... | ... | @@ -0,0 +1,16 @@ |
| 1 | +package kr.itn.itnhub.provision; | |
| 2 | + | |
| 3 | +public enum ChannelKind { | |
| 4 | + MJ("mj"), | |
| 5 | + LAW("law"); | |
| 6 | + | |
| 7 | + private final String code; | |
| 8 | + | |
| 9 | + ChannelKind(String code) { | |
| 10 | + this.code = code; | |
| 11 | + } | |
| 12 | + | |
| 13 | + public String code() { | |
| 14 | + return code; | |
| 15 | + } | |
| 16 | +} |
+++ src/main/java/kr/itn/itnhub/provision/ChannelNaming.java
... | ... | @@ -0,0 +1,30 @@ |
| 1 | +package kr.itn.itnhub.provision; | |
| 2 | + | |
| 3 | +/** | |
| 4 | + * 채널 이름 규칙. VBA M06/M07의 이식이며 기존에 만들어진 채널과 반드시 일치해야 한다. | |
| 5 | + * 규칙이 바뀌면 기존 채널을 찾지 못하고 중복 생성된다. | |
| 6 | + */ | |
| 7 | +public final class ChannelNaming { | |
| 8 | + | |
| 9 | + /** 같은 연번을 쓰지만 별도 기관으로 취급하는 유일한 예외. */ | |
| 10 | + public static final String SPECIAL_ORG_NAME = "경찰청_치안정책연구소"; | |
| 11 | + | |
| 12 | + private ChannelNaming() { | |
| 13 | + } | |
| 14 | + | |
| 15 | + public static String displayName(String orgNo, String orgName, String label) { | |
| 16 | + return orgNo.trim() + "_" + orgName.trim() + " (" + label.trim() + ")"; | |
| 17 | + } | |
| 18 | + | |
| 19 | + public static String internalName(String orgNo, String orgName, ChannelKind kind) { | |
| 20 | + String slug = orgNo.trim() | |
| 21 | + .toLowerCase() | |
| 22 | + .replace("_", "-") | |
| 23 | + .replace(" ", "-"); | |
| 24 | + | |
| 25 | + if (SPECIAL_ORG_NAME.equalsIgnoreCase(orgName.trim())) { | |
| 26 | + return "org-" + slug + "-policy-" + kind.code(); | |
| 27 | + } | |
| 28 | + return "org-" + slug + "-" + kind.code(); | |
| 29 | + } | |
| 30 | +} |
+++ src/test/java/kr/itn/itnhub/provision/ChannelNamingTest.java
... | ... | @@ -0,0 +1,56 @@ |
| 1 | +package kr.itn.itnhub.provision; | |
| 2 | + | |
| 3 | +import org.junit.jupiter.api.Test; | |
| 4 | + | |
| 5 | +import static org.assertj.core.api.Assertions.assertThat; | |
| 6 | + | |
| 7 | +class ChannelNamingTest { | |
| 8 | + | |
| 9 | + @Test | |
| 10 | + void 표시명은_연번_기관명_라벨을_조합한다() { | |
| 11 | + assertThat(ChannelNaming.displayName("001", "국제방송교류재단", "문정원")) | |
| 12 | + .isEqualTo("001_국제방송교류재단 (문정원)"); | |
| 13 | + | |
| 14 | + assertThat(ChannelNaming.displayName("001", "국제방송교류재단", "법률검토")) | |
| 15 | + .isEqualTo("001_국제방송교류재단 (법률검토)"); | |
| 16 | + } | |
| 17 | + | |
| 18 | + @Test | |
| 19 | + void 내부명은_org_연번_구분_형식이다() { | |
| 20 | + assertThat(ChannelNaming.internalName("001", "국제방송교류재단", ChannelKind.MJ)) | |
| 21 | + .isEqualTo("org-001-mj"); | |
| 22 | + | |
| 23 | + assertThat(ChannelNaming.internalName("001", "국제방송교류재단", ChannelKind.LAW)) | |
| 24 | + .isEqualTo("org-001-law"); | |
| 25 | + } | |
| 26 | + | |
| 27 | + @Test | |
| 28 | + void 치안정책연구소는_policy_구분자가_들어간다() { | |
| 29 | + assertThat(ChannelNaming.internalName("008", "경찰청_치안정책연구소", ChannelKind.MJ)) | |
| 30 | + .isEqualTo("org-008-policy-mj"); | |
| 31 | + | |
| 32 | + assertThat(ChannelNaming.internalName("008", "경찰청_치안정책연구소", ChannelKind.LAW)) | |
| 33 | + .isEqualTo("org-008-policy-law"); | |
| 34 | + } | |
| 35 | + | |
| 36 | + @Test | |
| 37 | + void 같은_연번의_대표기관은_policy가_붙지_않는다() { | |
| 38 | + assertThat(ChannelNaming.internalName("008", "경찰청", ChannelKind.MJ)) | |
| 39 | + .isEqualTo("org-008-mj"); | |
| 40 | + } | |
| 41 | + | |
| 42 | + @Test | |
| 43 | + void 연번의_밑줄과_공백은_하이픈으로_바뀌고_소문자가_된다() { | |
| 44 | + assertThat(ChannelNaming.internalName("00_A", "기관", ChannelKind.MJ)) | |
| 45 | + .isEqualTo("org-00-a-mj"); | |
| 46 | + | |
| 47 | + assertThat(ChannelNaming.internalName(" 00 B ", "기관", ChannelKind.MJ)) | |
| 48 | + .isEqualTo("org-00-b-mj"); | |
| 49 | + } | |
| 50 | + | |
| 51 | + @Test | |
| 52 | + void 연번의_앞자리_영은_보존된다() { | |
| 53 | + assertThat(ChannelNaming.internalName("001", "기관", ChannelKind.MJ)) | |
| 54 | + .startsWith("org-001-"); | |
| 55 | + } | |
| 56 | +} |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?