Add Hilt(Dagger) example unit tests for Core
This commit is contained in:
parent
488f020ab1
commit
7a0776ba9d
4 changed files with 102 additions and 1 deletions
|
|
@ -36,4 +36,6 @@ dependencies {
|
||||||
testImplementation "org.mockito.kotlin:mockito-kotlin:$testing_kotlin_mockito_version"
|
testImplementation "org.mockito.kotlin:mockito-kotlin:$testing_kotlin_mockito_version"
|
||||||
testImplementation "org.junit.jupiter:junit-jupiter-engine:$testing_junit5_version"
|
testImplementation "org.junit.jupiter:junit-jupiter-engine:$testing_junit5_version"
|
||||||
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$testing_junit5_version"
|
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$testing_junit5_version"
|
||||||
|
kaptTest "com.google.dagger:dagger-compiler:$hilt_version"
|
||||||
|
testImplementation "com.squareup.retrofit2:retrofit:$retrofit_version"
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,62 @@
|
||||||
|
package org.fnives.test.showcase.core.login.hilt
|
||||||
|
|
||||||
|
import kotlinx.coroutines.test.runBlockingTest
|
||||||
|
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
|
||||||
|
import org.junit.jupiter.api.Assertions
|
||||||
|
import org.junit.jupiter.api.BeforeEach
|
||||||
|
import org.junit.jupiter.api.Test
|
||||||
|
import org.koin.core.context.startKoin
|
||||||
|
import org.koin.core.context.stopKoin
|
||||||
|
import org.koin.test.KoinTest
|
||||||
|
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")
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun WHEN_no_call_THEN_storage_is_not_interacted() {
|
||||||
|
verifyZeroInteractions(mockUserDataLocalStorage)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun WHEN_logout_invoked_THEN_storage_is_cleared() = runBlockingTest {
|
||||||
|
val repositoryBefore = contentRepository
|
||||||
|
|
||||||
|
sut.invoke()
|
||||||
|
|
||||||
|
testCoreComponent.inject(this@LogoutUseCaseTest)
|
||||||
|
val repositoryAfter = contentRepository
|
||||||
|
verify(mockUserDataLocalStorage, times(1)).session = null
|
||||||
|
verifyNoMoreInteractions(mockUserDataLocalStorage)
|
||||||
|
Assertions.assertNotSame(repositoryBefore, repositoryAfter)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
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.HiltNetworkModule
|
||||||
|
import javax.inject.Singleton
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
@Component(modules = [CoreModule::class, HiltNetworkModule::class, ReloadLoggedInModuleInjectModuleImpl::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)
|
||||||
|
}
|
||||||
|
|
@ -1,8 +1,9 @@
|
||||||
package org.fnives.test.showcase.core.login
|
package org.fnives.test.showcase.core.login.koin
|
||||||
|
|
||||||
import kotlinx.coroutines.test.runBlockingTest
|
import kotlinx.coroutines.test.runBlockingTest
|
||||||
import org.fnives.test.showcase.core.content.ContentRepository
|
import org.fnives.test.showcase.core.content.ContentRepository
|
||||||
import org.fnives.test.showcase.core.di.koin.createCoreModule
|
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.core.storage.UserDataLocalStorage
|
||||||
import org.fnives.test.showcase.model.network.BaseUrl
|
import org.fnives.test.showcase.model.network.BaseUrl
|
||||||
import org.junit.jupiter.api.AfterEach
|
import org.junit.jupiter.api.AfterEach
|
||||||
Loading…
Add table
Add a link
Reference in a new issue