Add base URL tests
This commit is contained in:
@@ -1,8 +1,10 @@
|
|||||||
package gq.kirmanak.mealient.ui.baseurl
|
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.ServerInfoRepo
|
||||||
import gq.kirmanak.mealient.data.baseurl.VersionDataSource
|
import gq.kirmanak.mealient.data.baseurl.VersionDataSource
|
||||||
import gq.kirmanak.mealient.data.baseurl.VersionInfo
|
import gq.kirmanak.mealient.data.baseurl.VersionInfo
|
||||||
|
import gq.kirmanak.mealient.data.recipes.RecipeRepo
|
||||||
import gq.kirmanak.mealient.logging.Logger
|
import gq.kirmanak.mealient.logging.Logger
|
||||||
import gq.kirmanak.mealient.test.AuthImplTestData.TEST_BASE_URL
|
import gq.kirmanak.mealient.test.AuthImplTestData.TEST_BASE_URL
|
||||||
import gq.kirmanak.mealient.test.AuthImplTestData.TEST_VERSION
|
import gq.kirmanak.mealient.test.AuthImplTestData.TEST_VERSION
|
||||||
@@ -13,6 +15,7 @@ import io.mockk.coEvery
|
|||||||
import io.mockk.coVerify
|
import io.mockk.coVerify
|
||||||
import io.mockk.impl.annotations.MockK
|
import io.mockk.impl.annotations.MockK
|
||||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
|
import kotlinx.coroutines.test.TestScope
|
||||||
import kotlinx.coroutines.test.advanceUntilIdle
|
import kotlinx.coroutines.test.advanceUntilIdle
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
@@ -24,6 +27,12 @@ class BaseURLViewModelTest : RobolectricTest() {
|
|||||||
@MockK(relaxUnitFun = true)
|
@MockK(relaxUnitFun = true)
|
||||||
lateinit var serverInfoRepo: ServerInfoRepo
|
lateinit var serverInfoRepo: ServerInfoRepo
|
||||||
|
|
||||||
|
@MockK(relaxUnitFun = true)
|
||||||
|
lateinit var authRepo: AuthRepo
|
||||||
|
|
||||||
|
@MockK(relaxUnitFun = true)
|
||||||
|
lateinit var recipeRepo: RecipeRepo
|
||||||
|
|
||||||
@MockK
|
@MockK
|
||||||
lateinit var versionDataSource: VersionDataSource
|
lateinit var versionDataSource: VersionDataSource
|
||||||
|
|
||||||
@@ -34,16 +43,75 @@ class BaseURLViewModelTest : RobolectricTest() {
|
|||||||
@Before
|
@Before
|
||||||
fun setUp() {
|
fun setUp() {
|
||||||
MockKAnnotations.init(this)
|
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
|
@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 {
|
coEvery {
|
||||||
versionDataSource.getVersionInfo(eq(TEST_BASE_URL))
|
versionDataSource.getVersionInfo(eq(TEST_BASE_URL))
|
||||||
} returns VersionInfo(TEST_VERSION)
|
} returns VersionInfo(TEST_VERSION)
|
||||||
subject.saveBaseUrl(TEST_BASE_URL)
|
|
||||||
advanceUntilIdle()
|
|
||||||
coVerify { serverInfoRepo.storeBaseURL(eq(TEST_BASE_URL), eq(TEST_VERSION)) }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user