Coverage Summary for Class: SearchBarViewModel (clean.architecture.omdb.ui.search.bar)

Class Class, % Method, % Branch, % Line, % Instruction, %
SearchBarViewModel 100% (1/1) 100% (2/2) 100% (2/2) 100% (8/8) 100% (49/49)


 package clean.architecture.omdb.ui.search.bar
 
 import androidx.lifecycle.ViewModel
 import androidx.lifecycle.viewModelScope
 import clean.architecture.domain.search.usecase.SaveSearchUseCase
 import clean.architecture.omdb.ui.search.bar.mapper.toUiState
 import clean.architecture.omdb.ui.search.bar.model.SearchBarUiState
 import clean.architecture.omdb.ui.search.bar.view.SearchBar
 import dagger.hilt.android.lifecycle.HiltViewModel
 import kotlinx.coroutines.CoroutineDispatcher
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.flow.MutableStateFlow
 import kotlinx.coroutines.flow.StateFlow
 import kotlinx.coroutines.flow.asStateFlow
 import kotlinx.coroutines.launch
 import javax.inject.Inject
 
 /**
  * ViewModel for the [SearchBar] component.
  */
 @HiltViewModel
 class SearchBarViewModel @Inject constructor(
     private val saveSearchUseCase: SaveSearchUseCase,
     private val dispatcherIO: CoroutineDispatcher = Dispatchers.IO
 ) : ViewModel() {
 
     private val _uiState = MutableStateFlow<SearchBarUiState>(SearchBarUiState.Default)
 
     /**
      * Represents the state of the search bar.
      */
     val uiState: StateFlow<SearchBarUiState> = _uiState.asStateFlow()
 
     /**
      * Saves the current search to the local search history.
      *
      * @param query The search query.
      */
     fun saveSearch(query: String) {
         if (_uiState.value == SearchBarUiState.SavingInProgress) return
         _uiState.value = SearchBarUiState.SavingInProgress
         viewModelScope.launch(dispatcherIO) {
             _uiState.value = saveSearchUseCase(query).toUiState()
         }
     }
 }