Skip to content

Commit

Permalink
fix(PokemonDetailViewModel): successUiState 의 타입을 nullable 로
Browse files Browse the repository at this point in the history
- 테스트에서 advanceUntilIdle 제거
  • Loading branch information
sh1mj1 committed Dec 14, 2024
1 parent b437efe commit 2305509
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 32 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package poke.rogue.helper.presentation.dex.detail

import poke.rogue.helper.data.model.Biome
import poke.rogue.helper.data.model.PokemonDetail
import poke.rogue.helper.data.model.PokemonDetailSkills
import poke.rogue.helper.data.model.Stat
Expand All @@ -27,18 +26,6 @@ sealed interface PokemonDetailUiState {
data object IsLoading : PokemonDetailUiState
}

fun PokemonDetail.toUi(allBiomes: List<Biome>): PokemonDetailUiState.Success =
PokemonDetailUiState.Success(
pokemon = pokemon.toUi(),
stats = stats.map(Stat::toUi),
abilities = abilities.toPokemonDetailUi(),
evolutions = evolutions.toUi(),
skills = skills,
height = height.toFloat(),
weight = weight.toFloat(),
biomes = biomes.toUi(),
)

fun PokemonDetail.toUi(): PokemonDetailUiState.Success =
PokemonDetailUiState.Success(
pokemon = pokemon.toUi(),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package poke.rogue.helper.presentation.dex.detail

import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
Expand All @@ -28,10 +27,7 @@ class PokemonDetailViewModel(
MutableStateFlow(PokemonDetailUiState.IsLoading)
val uiState = _uiState.asStateFlow()

private val successUiState: PokemonDetailUiState.Success
get() =
uiState.value as? PokemonDetailUiState.Success
?: error("PokemonDetailUiState is note updated. You have to wait the updatePokemonDetail method is completed after called.")
private val successUiState: PokemonDetailUiState.Success? get() = uiState.value as? PokemonDetailUiState.Success

val isLoading: StateFlow<Boolean> =
uiState.map { it is PokemonDetailUiState.IsLoading }
Expand Down Expand Up @@ -67,18 +63,20 @@ class PokemonDetailViewModel(

override fun navigateToPokemonDetail(pokemonId: String) {
viewModelScope.launch {
if (successUiState.pokemon.id == pokemonId) {
_navigationEvent.emit(NavigationEvent.ToPokemonDetail.Failure(successUiState.pokemon.name))
return@launch
successUiState?.let { state ->
if (state.pokemon.id == pokemonId) {
_navigationEvent.emit(NavigationEvent.ToPokemonDetail.Failure(state.pokemon.name))
return@launch
}
_navigationEvent.emit(NavigationEvent.ToPokemonDetail.Success(pokemonId))
}
_navigationEvent.emit(NavigationEvent.ToPokemonDetail.Success(pokemonId))
}
}

override fun navigateToBattleWithMine() {
viewModelScope.launch {
successUiState.pokemon.let { pokemon ->
val event = NavigationEvent.ToBattle.WithMyPokemon(pokemon)
successUiState?.let { state ->
val event = NavigationEvent.ToBattle.WithMyPokemon(state.pokemon)
_navigationEvent.emit(event)
logger.logPokemonDetailToBattle(event)
}
Expand All @@ -87,8 +85,8 @@ class PokemonDetailViewModel(

override fun navigateToBattleWithOpponent() {
viewModelScope.launch {
successUiState.pokemon.let { pokemon ->
val event = NavigationEvent.ToBattle.WithOpponentPokemon(pokemon)
successUiState?.let { state ->
val event = NavigationEvent.ToBattle.WithOpponentPokemon(state.pokemon)
_navigationEvent.emit(event)
logger.logPokemonDetailToBattle(event)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package poke.rogue.helper.presentation.dex.detail
import io.kotest.matchers.shouldBe
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.test.advanceUntilIdle
import kotlinx.coroutines.test.runTest
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith
Expand Down Expand Up @@ -52,7 +51,6 @@ class PokemonDetailViewModelTest : KoinTest {
runTest {
// when
viewModel.updatePokemonDetail(pokemonId = "1")
advanceUntilIdle()

// then
val pokemonDetailUiState =
Expand Down Expand Up @@ -153,7 +151,6 @@ class PokemonDetailViewModelTest : KoinTest {
runTest {
// given
viewModel.updatePokemonDetail("1")
advanceUntilIdle()

// when
viewModel.navigateToPokemonDetail("1")
Expand All @@ -174,7 +171,6 @@ class PokemonDetailViewModelTest : KoinTest {
runTest {
// given
viewModel.updatePokemonDetail("1")
advanceUntilIdle()

// when
viewModel.navigateToPokemonDetail("2")
Expand All @@ -195,7 +191,6 @@ class PokemonDetailViewModelTest : KoinTest {
runTest {
// given
viewModel.updatePokemonDetail("1")
advanceUntilIdle()

// when
viewModel.navigateToBattleWithMine()
Expand All @@ -213,7 +208,6 @@ class PokemonDetailViewModelTest : KoinTest {
runTest {
// given
viewModel.updatePokemonDetail("1")
advanceUntilIdle()

// when
viewModel.navigateToBattleWithOpponent()
Expand Down

0 comments on commit 2305509

Please sign in to comment.