Issue#31 Remove hilt completely
This commit is contained in:
parent
e3bf7fd3e2
commit
b29870c90c
84 changed files with 75 additions and 1875 deletions
|
|
@ -2,9 +2,8 @@ package org.fnives.test.showcase.core.content
|
|||
|
||||
import org.fnives.test.showcase.core.storage.content.FavouriteContentLocalStorage
|
||||
import org.fnives.test.showcase.model.content.ContentId
|
||||
import javax.inject.Inject
|
||||
|
||||
class AddContentToFavouriteUseCase @Inject internal constructor(
|
||||
class AddContentToFavouriteUseCase internal constructor(
|
||||
private val favouriteContentLocalStorage: FavouriteContentLocalStorage
|
||||
) {
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ import kotlinx.coroutines.flow.distinctUntilChanged
|
|||
import kotlinx.coroutines.flow.flatMapLatest
|
||||
import kotlinx.coroutines.flow.flow
|
||||
import kotlinx.coroutines.flow.flowOf
|
||||
import org.fnives.test.showcase.core.di.hilt.LoggedInModuleInject
|
||||
import org.fnives.test.showcase.core.shared.Optional
|
||||
import org.fnives.test.showcase.core.shared.mapIntoResource
|
||||
import org.fnives.test.showcase.core.shared.wrapIntoAnswer
|
||||
|
|
@ -15,7 +14,7 @@ import org.fnives.test.showcase.model.content.Content
|
|||
import org.fnives.test.showcase.model.shared.Resource
|
||||
import org.fnives.test.showcase.network.content.ContentRemoteSource
|
||||
|
||||
internal class ContentRepository @LoggedInModuleInject constructor(
|
||||
internal class ContentRepository(
|
||||
private val contentRemoteSource: ContentRemoteSource
|
||||
) {
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
package org.fnives.test.showcase.core.content
|
||||
|
||||
import javax.inject.Inject
|
||||
|
||||
class FetchContentUseCase @Inject internal constructor(private val contentRepository: ContentRepository) {
|
||||
class FetchContentUseCase internal constructor(private val contentRepository: ContentRepository) {
|
||||
|
||||
fun invoke() = contentRepository.fetch()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,9 +7,8 @@ import org.fnives.test.showcase.model.content.Content
|
|||
import org.fnives.test.showcase.model.content.ContentId
|
||||
import org.fnives.test.showcase.model.content.FavouriteContent
|
||||
import org.fnives.test.showcase.model.shared.Resource
|
||||
import javax.inject.Inject
|
||||
|
||||
class GetAllContentUseCase @Inject internal constructor(
|
||||
class GetAllContentUseCase internal constructor(
|
||||
private val contentRepository: ContentRepository,
|
||||
private val favouriteContentLocalStorage: FavouriteContentLocalStorage
|
||||
) {
|
||||
|
|
|
|||
|
|
@ -2,9 +2,8 @@ package org.fnives.test.showcase.core.content
|
|||
|
||||
import org.fnives.test.showcase.core.storage.content.FavouriteContentLocalStorage
|
||||
import org.fnives.test.showcase.model.content.ContentId
|
||||
import javax.inject.Inject
|
||||
|
||||
class RemoveContentFromFavouritesUseCase @Inject internal constructor(
|
||||
class RemoveContentFromFavouritesUseCase internal constructor(
|
||||
private val favouriteContentLocalStorage: FavouriteContentLocalStorage
|
||||
) {
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ import org.fnives.test.showcase.core.storage.NetworkSessionLocalStorageAdapter
|
|||
import org.fnives.test.showcase.core.storage.UserDataLocalStorage
|
||||
import org.fnives.test.showcase.core.storage.content.FavouriteContentLocalStorage
|
||||
import org.fnives.test.showcase.model.network.BaseUrl
|
||||
import org.fnives.test.showcase.network.di.koin.createNetworkModules
|
||||
import org.fnives.test.showcase.network.di.createNetworkModules
|
||||
import org.koin.core.module.Module
|
||||
import org.koin.core.scope.Scope
|
||||
import org.koin.dsl.module
|
||||
|
|
@ -42,7 +42,7 @@ fun repositoryModule() = module {
|
|||
|
||||
fun useCaseModule() = module {
|
||||
factory { LoginUseCase(get(), get()) }
|
||||
factory { LogoutUseCase(get(), null) }
|
||||
factory { LogoutUseCase(get()) }
|
||||
factory { GetAllContentUseCase(get(), get()) }
|
||||
factory { AddContentToFavouriteUseCase(get()) }
|
||||
factory { RemoveContentFromFavouritesUseCase(get()) }
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
package org.fnives.test.showcase.core.di.hilt
|
||||
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import org.fnives.test.showcase.core.login.LogoutUseCase
|
||||
import org.fnives.test.showcase.core.session.SessionExpirationAdapter
|
||||
import org.fnives.test.showcase.core.storage.NetworkSessionLocalStorageAdapter
|
||||
import org.fnives.test.showcase.core.storage.UserDataLocalStorage
|
||||
import org.fnives.test.showcase.network.session.NetworkSessionExpirationListener
|
||||
import org.fnives.test.showcase.network.session.NetworkSessionLocalStorage
|
||||
|
||||
@InstallIn(SingletonComponent::class)
|
||||
@Module
|
||||
object CoreModule {
|
||||
|
||||
@Provides
|
||||
internal fun bindNetworkSessionLocalStorageAdapter(
|
||||
networkSessionLocalStorageAdapter: NetworkSessionLocalStorageAdapter
|
||||
): NetworkSessionLocalStorage = networkSessionLocalStorageAdapter
|
||||
|
||||
@Provides
|
||||
internal fun bindNetworkSessionExpirationListener(
|
||||
sessionExpirationAdapter: SessionExpirationAdapter
|
||||
): NetworkSessionExpirationListener = sessionExpirationAdapter
|
||||
|
||||
@Provides
|
||||
fun provideLogoutUseCase(
|
||||
storage: UserDataLocalStorage,
|
||||
reloadLoggedInModuleInjectModule: ReloadLoggedInModuleInjectModule
|
||||
): LogoutUseCase = LogoutUseCase(storage, reloadLoggedInModuleInjectModule)
|
||||
}
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
package org.fnives.test.showcase.core.di.hilt
|
||||
|
||||
import org.fnives.library.reloadable.module.annotation.ReloadableModule
|
||||
|
||||
@ReloadableModule
|
||||
@Target(AnnotationTarget.CONSTRUCTOR)
|
||||
@Retention(AnnotationRetention.SOURCE)
|
||||
annotation class LoggedInModuleInject
|
||||
|
|
@ -1,9 +1,8 @@
|
|||
package org.fnives.test.showcase.core.login
|
||||
|
||||
import org.fnives.test.showcase.core.storage.UserDataLocalStorage
|
||||
import javax.inject.Inject
|
||||
|
||||
class IsUserLoggedInUseCase @Inject constructor(
|
||||
class IsUserLoggedInUseCase(
|
||||
private val userDataLocalStorage: UserDataLocalStorage
|
||||
) {
|
||||
|
||||
|
|
|
|||
|
|
@ -7,9 +7,8 @@ import org.fnives.test.showcase.model.auth.LoginStatus
|
|||
import org.fnives.test.showcase.model.shared.Answer
|
||||
import org.fnives.test.showcase.network.auth.LoginRemoteSource
|
||||
import org.fnives.test.showcase.network.auth.model.LoginStatusResponses
|
||||
import javax.inject.Inject
|
||||
|
||||
class LoginUseCase @Inject internal constructor(
|
||||
class LoginUseCase internal constructor(
|
||||
private val loginRemoteSource: LoginRemoteSource,
|
||||
private val userDataLocalStorage: UserDataLocalStorage
|
||||
) {
|
||||
|
|
|
|||
|
|
@ -1,22 +1,15 @@
|
|||
package org.fnives.test.showcase.core.login
|
||||
|
||||
import org.fnives.test.showcase.core.di.hilt.ReloadLoggedInModuleInjectModule
|
||||
import org.fnives.test.showcase.core.di.koin.repositoryModule
|
||||
import org.fnives.test.showcase.core.storage.UserDataLocalStorage
|
||||
import org.koin.core.context.loadKoinModules
|
||||
import org.koin.mp.KoinPlatformTools
|
||||
|
||||
class LogoutUseCase(
|
||||
private val storage: UserDataLocalStorage,
|
||||
private val reloadLoggedInModuleInjectModule: ReloadLoggedInModuleInjectModule?
|
||||
private val storage: UserDataLocalStorage
|
||||
) {
|
||||
|
||||
suspend fun invoke() {
|
||||
if (KoinPlatformTools.defaultContext().getOrNull() == null) {
|
||||
reloadLoggedInModuleInjectModule?.reload()
|
||||
} else {
|
||||
loadKoinModules(repositoryModule())
|
||||
}
|
||||
loadKoinModules(repositoryModule())
|
||||
storage.session = null
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,8 @@
|
|||
package org.fnives.test.showcase.core.session
|
||||
|
||||
import org.fnives.test.showcase.network.session.NetworkSessionExpirationListener
|
||||
import javax.inject.Inject
|
||||
|
||||
internal class SessionExpirationAdapter @Inject constructor(
|
||||
internal class SessionExpirationAdapter(
|
||||
private val sessionExpirationListener: SessionExpirationListener
|
||||
) : NetworkSessionExpirationListener {
|
||||
|
||||
|
|
|
|||
|
|
@ -2,9 +2,8 @@ package org.fnives.test.showcase.core.storage
|
|||
|
||||
import org.fnives.test.showcase.model.session.Session
|
||||
import org.fnives.test.showcase.network.session.NetworkSessionLocalStorage
|
||||
import javax.inject.Inject
|
||||
|
||||
internal class NetworkSessionLocalStorageAdapter @Inject constructor(
|
||||
internal class NetworkSessionLocalStorageAdapter(
|
||||
private val userDataLocalStorage: UserDataLocalStorage
|
||||
) : NetworkSessionLocalStorage {
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,9 @@
|
|||
package org.fnives.test.showcase.core.login.koin
|
||||
package org.fnives.test.showcase.core.login
|
||||
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import org.fnives.test.showcase.core.content.ContentRepository
|
||||
import org.fnives.test.showcase.core.di.koin.createCoreModule
|
||||
import org.fnives.test.showcase.core.login.LogoutUseCase
|
||||
import org.fnives.test.showcase.core.storage.UserDataLocalStorage
|
||||
import org.fnives.test.showcase.model.network.BaseUrl
|
||||
import org.junit.jupiter.api.AfterEach
|
||||
|
|
@ -31,7 +30,7 @@ internal class LogoutUseCaseTest : KoinTest {
|
|||
@BeforeEach
|
||||
fun setUp() {
|
||||
mockUserDataLocalStorage = mock()
|
||||
sut = LogoutUseCase(mockUserDataLocalStorage, null)
|
||||
sut = LogoutUseCase(mockUserDataLocalStorage)
|
||||
startKoin {
|
||||
modules(
|
||||
createCoreModule(
|
||||
|
|
@ -1,62 +0,0 @@
|
|||
package org.fnives.test.showcase.core.login.hilt
|
||||
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import org.fnives.test.showcase.core.content.ContentRepository
|
||||
import org.fnives.test.showcase.core.login.LogoutUseCase
|
||||
import org.fnives.test.showcase.core.storage.UserDataLocalStorage
|
||||
import org.junit.jupiter.api.Assertions
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.mockito.kotlin.mock
|
||||
import org.mockito.kotlin.times
|
||||
import org.mockito.kotlin.verify
|
||||
import org.mockito.kotlin.verifyNoMoreInteractions
|
||||
import org.mockito.kotlin.verifyZeroInteractions
|
||||
import javax.inject.Inject
|
||||
|
||||
@Suppress("TestFunctionName")
|
||||
@OptIn(ExperimentalCoroutinesApi::class)
|
||||
internal class LogoutUseCaseTest {
|
||||
|
||||
@Inject
|
||||
lateinit var sut: LogoutUseCase
|
||||
private lateinit var mockUserDataLocalStorage: UserDataLocalStorage
|
||||
private lateinit var testCoreComponent: TestCoreComponent
|
||||
|
||||
@Inject
|
||||
lateinit var contentRepository: ContentRepository
|
||||
|
||||
@BeforeEach
|
||||
fun setUp() {
|
||||
mockUserDataLocalStorage = mock()
|
||||
testCoreComponent = DaggerTestCoreComponent.builder()
|
||||
.setBaseUrl("https://a.b.com")
|
||||
.setEnableLogging(true)
|
||||
.setSessionExpirationListener(mock())
|
||||
.setUserDataLocalStorage(mockUserDataLocalStorage)
|
||||
.build()
|
||||
testCoreComponent.inject(this)
|
||||
}
|
||||
|
||||
@DisplayName("WHEN no call THEN storage is not interacted")
|
||||
@Test
|
||||
fun initializedDoesntAffectStorage() {
|
||||
verifyZeroInteractions(mockUserDataLocalStorage)
|
||||
}
|
||||
|
||||
@DisplayName("WHEN logout invoked THEN storage is cleared")
|
||||
@Test
|
||||
fun logoutResultsInStorageCleaning() = runTest {
|
||||
val repositoryBefore = contentRepository
|
||||
|
||||
sut.invoke()
|
||||
|
||||
testCoreComponent.inject(this@LogoutUseCaseTest)
|
||||
val repositoryAfter = contentRepository
|
||||
verify(mockUserDataLocalStorage, times(1)).session = null
|
||||
verifyNoMoreInteractions(mockUserDataLocalStorage)
|
||||
Assertions.assertNotSame(repositoryBefore, repositoryAfter)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
package org.fnives.test.showcase.core.login.hilt
|
||||
|
||||
import dagger.BindsInstance
|
||||
import dagger.Component
|
||||
import org.fnives.test.showcase.core.di.hilt.CoreModule
|
||||
import org.fnives.test.showcase.core.di.hilt.ReloadLoggedInModuleInjectModuleImpl
|
||||
import org.fnives.test.showcase.core.session.SessionExpirationListener
|
||||
import org.fnives.test.showcase.core.storage.UserDataLocalStorage
|
||||
import org.fnives.test.showcase.network.di.hilt.BindsBaseOkHttpClient
|
||||
import org.fnives.test.showcase.network.di.hilt.HiltNetworkModule
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Singleton
|
||||
@Component(modules = [CoreModule::class, HiltNetworkModule::class, ReloadLoggedInModuleInjectModuleImpl::class, BindsBaseOkHttpClient::class])
|
||||
internal interface TestCoreComponent {
|
||||
|
||||
@Component.Builder
|
||||
interface Builder {
|
||||
|
||||
@BindsInstance
|
||||
fun setBaseUrl(baseUrl: String): Builder
|
||||
|
||||
@BindsInstance
|
||||
fun setEnableLogging(enableLogging: Boolean): Builder
|
||||
|
||||
@BindsInstance
|
||||
fun setSessionExpirationListener(listener: SessionExpirationListener): Builder
|
||||
|
||||
@BindsInstance
|
||||
fun setUserDataLocalStorage(storage: UserDataLocalStorage): Builder
|
||||
|
||||
fun build(): TestCoreComponent
|
||||
}
|
||||
|
||||
fun inject(logoutUseCaseTest: LogoutUseCaseTest)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue