feat(content): 전체보기 화면 등록을 추가한다
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
package kr.co.vividnext.sodalive.v2.main.content.overview
|
||||
|
||||
import android.app.Application
|
||||
import org.junit.Assert.assertFalse
|
||||
import org.junit.Assert.assertTrue
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.robolectric.RobolectricTestRunner
|
||||
import org.robolectric.annotation.Config
|
||||
import java.io.File
|
||||
|
||||
@RunWith(RobolectricTestRunner::class)
|
||||
@Config(application = Application::class)
|
||||
class ContentOverviewActivitySourceTest {
|
||||
|
||||
@Test
|
||||
fun `ContentOverviewActivity source has intent extra and two column grid contract`() {
|
||||
val source = projectFile(
|
||||
"app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/overview/ContentOverviewActivity.kt"
|
||||
).readText()
|
||||
|
||||
assertTrue(source.contains("private const val EXTRA_CONTENT_OVERVIEW_TYPE"))
|
||||
assertTrue(source.contains("fun newIntent(context: Context, type: ContentOverviewType): Intent"))
|
||||
assertTrue(source.contains("putExtra(EXTRA_CONTENT_OVERVIEW_TYPE, type.name)"))
|
||||
assertTrue(source.contains("CONTENT_OVERVIEW_GRID_SPAN_COUNT"))
|
||||
assertTrue(source.contains("GridLayoutManager(this, CONTENT_OVERVIEW_GRID_SPAN_COUNT)"))
|
||||
assertTrue(
|
||||
source.contains(
|
||||
"binding.rvContentOverviewItems.calculateContentGridItemWidthPx(CONTENT_OVERVIEW_GRID_SPAN_COUNT)"
|
||||
)
|
||||
)
|
||||
assertTrue(source.contains("viewModel.loadMore()"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `ContentOverview layout has Figma title bar and state views`() {
|
||||
val layout = projectFile("app/src/main/res/layout/activity_content_overview.xml").readText()
|
||||
|
||||
assertTrue(layout.contains("@+id/layout_content_overview_root"))
|
||||
assertTrue(layout.contains("android:background=\"@color/black\""))
|
||||
assertTrue(layout.contains("@+id/layout_content_overview_title_bar"))
|
||||
assertTrue(layout.contains("android:layout_height=\"60dp\""))
|
||||
assertTrue(layout.contains("@+id/iv_content_overview_back"))
|
||||
assertTrue(layout.contains("@drawable/ic_new_bar_back"))
|
||||
assertTrue(layout.contains("@+id/tv_content_overview_title"))
|
||||
assertTrue(layout.contains("@style/Typography.Heading2"))
|
||||
assertTrue(layout.contains("@+id/rv_content_overview_items"))
|
||||
assertTrue(layout.contains("@+id/pb_content_overview_initial_loading"))
|
||||
assertTrue(layout.contains("@+id/pb_content_overview_load_more"))
|
||||
assertTrue(layout.contains("@+id/tv_content_overview_empty_error"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `ContentOverviewActivity renders first and load more loading states visibly`() {
|
||||
val source = projectFile(
|
||||
"app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/overview/ContentOverviewActivity.kt"
|
||||
).readText()
|
||||
|
||||
assertTrue(source.contains("viewModel.isLoading.observe(this)"))
|
||||
assertTrue(source.contains("pbContentOverviewInitialLoading.visibility = View.VISIBLE"))
|
||||
assertTrue(source.contains("pbContentOverviewInitialLoading.visibility = View.GONE"))
|
||||
assertTrue(source.contains("pbContentOverviewLoadMore.visibility = View.GONE"))
|
||||
assertTrue(source.contains("pbContentOverviewLoadMore.visibility = if (state.isLoadingMore)"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `ContentOverviewActivity opens audio detail with content id`() {
|
||||
val source = projectFile(
|
||||
"app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/overview/ContentOverviewActivity.kt"
|
||||
).readText()
|
||||
|
||||
assertTrue(source.contains("AudioContentDetailActivity::class.java"))
|
||||
assertTrue(source.contains("if (contentId <= 0) return"))
|
||||
assertTrue(source.contains("putExtra(Constants.EXTRA_AUDIO_CONTENT_ID, contentId)"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `ContentOverviewAdapter ignores invalid content id clicks`() {
|
||||
val source = projectFile(
|
||||
"app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/overview/ui/ContentOverviewAdapter.kt"
|
||||
).readText()
|
||||
|
||||
assertTrue(source.contains("if (item.contentId <= 0) return@setOnClickListener"))
|
||||
assertTrue(source.contains("onContentClick(item.contentId)"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `manifest registers ContentOverviewActivity and Phase 7 routing is not added`() {
|
||||
val manifest = projectFile("app/src/main/AndroidManifest.xml").readText()
|
||||
val homeSource = projectFile(
|
||||
"app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/HomeMainFragment.kt"
|
||||
).readText()
|
||||
val contentSource = projectFile(
|
||||
"app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragment.kt"
|
||||
).readText()
|
||||
|
||||
assertTrue(manifest.contains(".v2.main.content.overview.ContentOverviewActivity"))
|
||||
assertFalse(homeSource.contains("viewHomeFirstAudioTitle.ivSectionTitleChevron.setOnClickListener"))
|
||||
assertFalse(contentSource.contains("viewContentNewAndHotTitle.ivSectionTitleChevron.setOnClickListener"))
|
||||
}
|
||||
|
||||
private fun projectFile(relativePath: String): File {
|
||||
val userDir = requireNotNull(System.getProperty("user.dir"))
|
||||
val fromRoot = File(userDir, relativePath)
|
||||
if (fromRoot.exists()) return fromRoot
|
||||
|
||||
val projectRoot = requireNotNull(File(userDir).parentFile)
|
||||
return projectRoot.resolve(relativePath)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user