mirror of
https://github.com/Jeuners/ECC.git
synced 2026-09-09 15:02:30 +02:00
fix: resolve semantic mismatch between UseCase naming and ViewModel usage
This commit is contained in:
parent
ab693f7b8a
commit
f6a470de63
4 changed files with 13 additions and 6 deletions
|
|
@ -15,14 +15,14 @@ Prefer constructor injection. Use Koin (KMP) or Hilt (Android-only):
|
|||
// Koin — declare modules
|
||||
val dataModule = module {
|
||||
single<ItemRepository> { ItemRepositoryImpl(get(), get()) }
|
||||
factory { GetItemUseCase(get()) }
|
||||
factory { GetItemsUseCase(get()) }
|
||||
viewModelOf(::ItemListViewModel)
|
||||
}
|
||||
|
||||
// Hilt — annotations
|
||||
@HiltViewModel
|
||||
class ItemListViewModel @Inject constructor(
|
||||
private val getItem: GetItemUseCase
|
||||
private val getItems: GetItemsUseCase
|
||||
) : ViewModel()
|
||||
```
|
||||
|
||||
|
|
@ -36,7 +36,7 @@ data class ScreenState(
|
|||
val isLoading: Boolean = false
|
||||
)
|
||||
|
||||
class ScreenViewModel(private val useCase: GetItemUseCase) : ViewModel() {
|
||||
class ScreenViewModel(private val useCase: GetItemsUseCase) : ViewModel() {
|
||||
private val _state = MutableStateFlow(ScreenState())
|
||||
val state = _state.asStateFlow()
|
||||
|
||||
|
|
@ -58,6 +58,7 @@ class ScreenViewModel(private val useCase: GetItemUseCase) : ViewModel() {
|
|||
```kotlin
|
||||
interface ItemRepository {
|
||||
suspend fun getById(id: String): Result<Item>
|
||||
suspend fun getAll(): Result<List<Item>>
|
||||
fun observeAll(): Flow<List<Item>>
|
||||
}
|
||||
```
|
||||
|
|
@ -72,6 +73,12 @@ class GetItemUseCase(private val repository: ItemRepository) {
|
|||
return repository.getById(id)
|
||||
}
|
||||
}
|
||||
|
||||
class GetItemsUseCase(private val repository: ItemRepository) {
|
||||
suspend operator fun invoke(): Result<List<Item>> {
|
||||
return repository.getAll()
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## expect/actual (KMP)
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ paths:
|
|||
fun `loading state emitted then data`() = runTest {
|
||||
val repo = FakeItemRepository()
|
||||
repo.addItem(testItem)
|
||||
val viewModel = ItemListViewModel(GetItemUseCase(repo))
|
||||
val viewModel = ItemListViewModel(GetItemsUseCase(repo))
|
||||
|
||||
viewModel.state.test {
|
||||
assertEquals(ItemListState(), awaitItem()) // initial state
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ data class ItemListState(
|
|||
)
|
||||
|
||||
class ItemListViewModel(
|
||||
private val getItems: GetItemUseCase
|
||||
private val getItems: GetItemsUseCase
|
||||
) : ViewModel() {
|
||||
private val _state = MutableStateFlow(ItemListState())
|
||||
val state: StateFlow<ItemListState> = _state.asStateFlow()
|
||||
|
|
|
|||
|
|
@ -218,7 +218,7 @@ viewModelScope.launch {
|
|||
@Test
|
||||
fun `search updates item list`() = runTest {
|
||||
val fakeRepository = FakeItemRepository(items = testItems)
|
||||
val viewModel = ItemListViewModel(GetItemUseCase(fakeRepository))
|
||||
val viewModel = ItemListViewModel(GetItemsUseCase(fakeRepository))
|
||||
|
||||
viewModel.state.test {
|
||||
assertEquals(ItemListState(), awaitItem()) // initial
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue