feat(creator-channel): FanTalk 글 입력 화면을 연결한다

This commit is contained in:
2026-07-08 03:44:44 +09:00
parent b020b8096b
commit 25af312d91
4 changed files with 228 additions and 0 deletions

View File

@@ -0,0 +1,77 @@
package kr.co.vividnext.sodalive.v2.creator.channel.fantalk.write
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Test
import java.io.File
class CreatorChannelFanTalkWriteSourceTest {
@Test
fun `글 입력 Activity source는 intent focus keyboard result cancel back 계약을 포함한다`() {
val source = projectFile(
"app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/fantalk/write/CreatorChannelFanTalkWriteActivity.kt"
).readText()
val manifest = projectFile("app/src/main/AndroidManifest.xml").readText()
assertTrue(source.contains("fun newIntent(context: Context, creatorId: Long): Intent"))
assertTrue(source.contains("putExtra(EXTRA_CREATOR_ID, creatorId)"))
assertTrue(source.contains("if (creatorId <= 0L)"))
assertTrue(source.contains("finish()"))
assertTrue(source.contains("requestFocus()"))
assertTrue(source.contains("WindowCompat.getInsetsController(window, binding.etCreatorChannelFantalkWriteContent)"))
assertTrue(source.contains("WindowInsetsCompat.Type.ime()"))
assertTrue(source.contains("onBackPressedDispatcher.addCallback"))
assertTrue(source.contains("showCancelConfirmDialog()"))
assertTrue(source.contains("setResult(RESULT_OK)"))
assertTrue(source.contains("viewModel.submit(creatorId)"))
assertTrue(manifest.contains(".v2.creator.channel.fantalk.write.CreatorChannelFanTalkWriteActivity"))
}
@Test
fun `글 입력 layout과 문자열은 Figma 확정 계약을 포함한다`() {
val source = projectFile(
"app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/fantalk/write/CreatorChannelFanTalkWriteActivity.kt"
).readText()
val layout = projectFile("app/src/main/res/layout/activity_creator_channel_fantalk_write.xml").readText()
val strings = projectFile("app/src/main/res/values/strings.xml").readText()
val stringsEn = projectFile("app/src/main/res/values-en/strings.xml").readText()
val stringsJa = projectFile("app/src/main/res/values-ja/strings.xml").readText()
assertTrue(layout.contains("@+id/tv_creator_channel_fantalk_write_cancel"))
assertTrue(layout.contains("@+id/et_creator_channel_fantalk_write_content"))
assertTrue(layout.contains("@+id/tv_creator_channel_fantalk_write_send"))
assertTrue(layout.contains("@+id/layout_creator_channel_fantalk_write_info_bar"))
assertTrue(layout.contains("@+id/tv_creator_channel_fantalk_write_count"))
assertTrue(layout.contains("@+id/tv_creator_channel_fantalk_write_count_limit"))
assertTrue(layout.contains("android:maxLength=\"500\""))
assertTrue(layout.contains("android:text=\"/500자\""))
assertFalse(layout.contains("tv_creator_channel_fantalk_write_title"))
assertTrue(layout.contains("@string/creator_channel_fantalk_write_cancel"))
assertTrue(layout.contains("@string/creator_channel_fantalk_write_hint"))
assertTrue(layout.contains("@string/creator_channel_fantalk_write_send"))
assertTrue(
projectFile("app/src/main/res/drawable/bg_creator_channel_fantalk_write_send_enabled.xml")
.readText()
.contains("@color/soda_400")
)
assertTrue(source.contains("if (isEnabled) R.color.white else R.color.gray_500"))
assertTrue(strings.contains("<string name=\"creator_channel_fantalk_write_exit_title\">입력 종료</string>"))
assertTrue(
strings.contains(
"<string name=\"creator_channel_fantalk_write_exit_desc\">입력을 종료할까요?\\n지금 나가면 입력한 내용이 저장되지 않아요.</string>"
)
)
assertTrue(strings.contains("<string name=\"creator_channel_fantalk_write_exit_cancel\">계속 작성</string>"))
assertTrue(strings.contains("<string name=\"creator_channel_fantalk_write_exit_confirm\">종료</string>"))
assertTrue(stringsEn.contains("creator_channel_fantalk_write_exit_title"))
assertTrue(stringsJa.contains("creator_channel_fantalk_write_exit_title"))
}
private fun projectFile(path: String): File = File(projectRoot(), path)
private fun projectRoot(): File {
return generateSequence(File(System.getProperty("user.dir") ?: ".").absoluteFile) { it.parentFile }
.first { File(it, "settings.gradle").exists() }
}
}