Add base URL tests

This commit is contained in:
Kirill Kamakin
2022-11-12 12:48:46 +01:00
parent 4e1e3f81e3
commit 3504eae248

View File

@@ -1,8 +1,10 @@
package gq.kirmanak.mealient.ui.baseurl
import gq.kirmanak.mealient.data.auth.AuthRepo
import gq.kirmanak.mealient.data.baseurl.ServerInfoRepo
import gq.kirmanak.mealient.data.baseurl.VersionDataSource
import gq.kirmanak.mealient.data.baseurl.VersionInfo
import gq.kirmanak.mealient.data.recipes.RecipeRepo
import gq.kirmanak.mealient.logging.Logger
import gq.kirmanak.mealient.test.AuthImplTestData.TEST_BASE_URL
import gq.kirmanak.mealient.test.AuthImplTestData.TEST_VERSION
@@ -13,6 +15,7 @@ import io.mockk.coEvery
import io.mockk.coVerify
import io.mockk.impl.annotations.MockK
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.advanceUntilIdle
import kotlinx.coroutines.test.runTest
import org.junit.Before
@@ -24,6 +27,12 @@ class BaseURLViewModelTest : RobolectricTest() {
@MockK(relaxUnitFun = true)
lateinit var serverInfoRepo: ServerInfoRepo
@MockK(relaxUnitFun = true)
lateinit var authRepo: AuthRepo
@MockK(relaxUnitFun = true)
lateinit var recipeRepo: RecipeRepo
@MockK
lateinit var versionDataSource: VersionDataSource
@@ -34,16 +43,75 @@ class BaseURLViewModelTest : RobolectricTest() {
@Before
fun setUp() {
MockKAnnotations.init(this)
subject = BaseURLViewModel(serverInfoRepo, versionDataSource, logger)
subject = BaseURLViewModel(
serverInfoRepo = serverInfoRepo,
authRepo = authRepo,
recipeRepo = recipeRepo,
versionDataSource = versionDataSource,
logger = logger,
)
}
@Test
fun `when saveBaseURL expect no version checks given that current URL matches new`() = runTest {
setupSaveBaseUrlWithOldUrl()
coVerify(inverse = true) { versionDataSource.getVersionInfo(any()) }
}
@Test
fun `when saveBaseUrl and getVersionInfo returns result then saves to storage`() = runTest {
fun `when saveBaseURL expect URL isn't saved given that current URL matches new`() = runTest {
setupSaveBaseUrlWithOldUrl()
coVerify(inverse = true) { serverInfoRepo.storeBaseURL(any(), any()) }
}
@Test
fun `when saveBaseURL expect no logout given that current URL matches new`() = runTest {
setupSaveBaseUrlWithOldUrl()
coVerify(inverse = true) { authRepo.logout() }
}
@Test
fun `when saveBaseURL expect data intact given that current URL matches new`() = runTest {
setupSaveBaseUrlWithOldUrl()
coVerify(inverse = true) { recipeRepo.clearLocalData() }
}
private fun TestScope.setupSaveBaseUrlWithOldUrl() {
coEvery { serverInfoRepo.getUrl() } returns TEST_BASE_URL
versionDataSourceReturnsSuccess()
subject.saveBaseUrl(TEST_BASE_URL)
advanceUntilIdle()
}
@Test
fun `when saveBaseUrl expect URL is saved given that new URL doesn't match old`() = runTest {
setupSaveBaseUrlWithNewUrl()
coVerify { serverInfoRepo.storeBaseURL(eq(TEST_BASE_URL), eq(TEST_VERSION)) }
}
@Test
fun `when saveBaseURL expect logout given that new URL doesn't match old`() = runTest {
setupSaveBaseUrlWithNewUrl()
coVerify { authRepo.logout() }
}
@Test
fun `when saveBaseURL expect recipes removed given that new URL doesn't match old`() = runTest {
setupSaveBaseUrlWithNewUrl()
coVerify { recipeRepo.clearLocalData() }
}
private fun TestScope.setupSaveBaseUrlWithNewUrl() {
coEvery { serverInfoRepo.getUrl() } returns null
versionDataSourceReturnsSuccess()
subject.saveBaseUrl(TEST_BASE_URL)
advanceUntilIdle()
}
private fun versionDataSourceReturnsSuccess() {
coEvery {
versionDataSource.getVersionInfo(eq(TEST_BASE_URL))
} returns VersionInfo(TEST_VERSION)
subject.saveBaseUrl(TEST_BASE_URL)
advanceUntilIdle()
coVerify { serverInfoRepo.storeBaseURL(eq(TEST_BASE_URL), eq(TEST_VERSION)) }
}
}