From 43e90ed47b253d519ab1d0ea78b734259c27f2bd Mon Sep 17 00:00:00 2001 From: klaus Date: Sat, 27 Jun 2026 06:32:31 +0900 Subject: [PATCH] =?UTF-8?q?feat(content):=20=EC=A0=84=EC=B2=B4=20=ED=83=AD?= =?UTF-8?q?=20=EC=99=B8=EB=B6=80=20=EC=84=A0=ED=83=9D=EC=9D=84=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v2/main/content/ContentAllTabViewModel.kt | 7 ++ .../content/ContentAllTabViewModelTest.kt | 64 +++++++++++++++++++ 2 files changed, 71 insertions(+) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/ContentAllTabViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/ContentAllTabViewModel.kt index 36c18638..79253773 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/ContentAllTabViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/ContentAllTabViewModel.kt @@ -63,6 +63,13 @@ class ContentAllTabViewModel( loadFirstPage(selectedType, sort, selectedDayOfWeekFor(selectedType)) } + fun selectTypeAndSort(type: MainContentAllType, sort: ContentSort) { + selectedType = type + selectedSort = sort + selectedDayOfWeek = selectedDayOfWeekFor(type) + loadFirstPage(type, sort, selectedDayOfWeek) + } + fun changeDayOfWeek(dayOfWeek: SeriesPublishedDaysOfWeek) { if (!selectedType.usesDayOfWeekQuery()) return diff --git a/app/src/test/java/kr/co/vividnext/sodalive/v2/main/content/ContentAllTabViewModelTest.kt b/app/src/test/java/kr/co/vividnext/sodalive/v2/main/content/ContentAllTabViewModelTest.kt index bde73aeb..fd755bbb 100644 --- a/app/src/test/java/kr/co/vividnext/sodalive/v2/main/content/ContentAllTabViewModelTest.kt +++ b/app/src/test/java/kr/co/vividnext/sodalive/v2/main/content/ContentAllTabViewModelTest.kt @@ -227,6 +227,70 @@ class ContentAllTabViewModelTest { verifyGetContents(type = MainContentAllType.ORIGINAL, page = 0, dayOfWeek = null) } + @Test + fun `외부 선택 요청은 FREE POPULAR 첫 페이지를 dayOfWeek 없이 요청한다`() { + stubGetContents( + type = MainContentAllType.FREE, + sort = ContentSort.POPULAR, + response = Single.just( + ApiResponse( + true, + response( + type = MainContentAllType.FREE, + sort = ContentSort.POPULAR, + audios = listOf(audio(30L)) + ), + null + ) + ) + ) + + viewModel.selectTypeAndSort(MainContentAllType.FREE, ContentSort.POPULAR) + + val state = viewModel.allTabStateLiveData.requireValue() as MainContentAllTabUiState.Content + assertEquals(MainContentAllType.FREE, state.selectedType) + assertEquals(ContentSort.POPULAR, state.selectedSort) + assertEquals(null, state.selectedDayOfWeek) + assertEquals(0, state.page) + verifyGetContents( + type = MainContentAllType.FREE, + sort = ContentSort.POPULAR, + page = 0, + dayOfWeek = null + ) + } + + @Test + fun `외부 선택 요청은 ORIGINAL LATEST 첫 페이지를 dayOfWeek 없이 요청한다`() { + stubGetContents( + type = MainContentAllType.ORIGINAL, + response = Single.just( + ApiResponse( + true, + response( + type = MainContentAllType.ORIGINAL, + series = listOf(series(31L)) + ), + null + ) + ) + ) + + viewModel.selectTypeAndSort(MainContentAllType.ORIGINAL, ContentSort.LATEST) + + val state = viewModel.allTabStateLiveData.requireValue() as MainContentAllTabUiState.Content + assertEquals(MainContentAllType.ORIGINAL, state.selectedType) + assertEquals(ContentSort.LATEST, state.selectedSort) + assertEquals(null, state.selectedDayOfWeek) + assertEquals(0, state.page) + verifyGetContents( + type = MainContentAllType.ORIGINAL, + sort = ContentSort.LATEST, + page = 0, + dayOfWeek = null + ) + } + @Test fun `SERIES에서 요일 변경은 변경 요일과 page 0으로 요청한다`() { stubGetContents(response = Single.just(ApiResponse(true, response(), null)))