Extract server info repo

This commit is contained in:
Kirill Kamakin
2022-10-29 19:15:57 +02:00
parent 9e9d07db7d
commit cda22215ec
21 changed files with 205 additions and 122 deletions

View File

@@ -4,7 +4,7 @@ import com.google.common.truth.Truth.assertThat
import gq.kirmanak.mealient.data.auth.AuthDataSource
import gq.kirmanak.mealient.data.auth.AuthRepo
import gq.kirmanak.mealient.data.auth.AuthStorage
import gq.kirmanak.mealient.data.baseurl.BaseURLStorage
import gq.kirmanak.mealient.data.baseurl.ServerInfoStorage
import gq.kirmanak.mealient.logging.Logger
import gq.kirmanak.mealient.test.AuthImplTestData.TEST_AUTH_HEADER
import gq.kirmanak.mealient.test.AuthImplTestData.TEST_BASE_URL
@@ -27,7 +27,7 @@ class AuthRepoImplTest {
lateinit var dataSource: AuthDataSource
@MockK
lateinit var baseURLStorage: BaseURLStorage
lateinit var serverInfoStorage: ServerInfoStorage
@MockK(relaxUnitFun = true)
lateinit var storage: AuthStorage
@@ -40,7 +40,7 @@ class AuthRepoImplTest {
@Before
fun setUp() {
MockKAnnotations.init(this)
subject = AuthRepoImpl(storage, dataSource, baseURLStorage, logger)
subject = AuthRepoImpl(storage, dataSource, serverInfoStorage, logger)
}
@Test
@@ -58,7 +58,7 @@ class AuthRepoImplTest {
eq(TEST_BASE_URL)
)
} returns TEST_TOKEN
coEvery { baseURLStorage.requireBaseURL() } returns TEST_BASE_URL
coEvery { serverInfoStorage.requireBaseURL() } returns TEST_BASE_URL
subject.authenticate(TEST_USERNAME, TEST_PASSWORD)
coVerifyAll {
storage.setAuthHeader(TEST_AUTH_HEADER)
@@ -71,7 +71,7 @@ class AuthRepoImplTest {
@Test
fun `when authenticate fails then does not change storage`() = runTest {
coEvery { dataSource.authenticate(any(), any(), any()) } throws RuntimeException()
coEvery { baseURLStorage.requireBaseURL() } returns TEST_BASE_URL
coEvery { serverInfoStorage.requireBaseURL() } returns TEST_BASE_URL
runCatching { subject.authenticate("invalid", "") }
confirmVerified(storage)
}
@@ -107,7 +107,7 @@ class AuthRepoImplTest {
fun `when invalidate with credentials then calls authenticate`() = runTest {
coEvery { storage.getEmail() } returns TEST_USERNAME
coEvery { storage.getPassword() } returns TEST_PASSWORD
coEvery { baseURLStorage.requireBaseURL() } returns TEST_BASE_URL
coEvery { serverInfoStorage.requireBaseURL() } returns TEST_BASE_URL
coEvery {
dataSource.authenticate(eq(TEST_USERNAME), eq(TEST_PASSWORD), eq(TEST_BASE_URL))
} returns TEST_TOKEN
@@ -121,7 +121,7 @@ class AuthRepoImplTest {
fun `when invalidate with credentials and auth fails then clears email`() = runTest {
coEvery { storage.getEmail() } returns "invalid"
coEvery { storage.getPassword() } returns ""
coEvery { baseURLStorage.requireBaseURL() } returns TEST_BASE_URL
coEvery { serverInfoStorage.requireBaseURL() } returns TEST_BASE_URL
coEvery { dataSource.authenticate(any(), any(), any()) } throws RuntimeException()
subject.invalidateAuthHeader()
coVerify { storage.setEmail(null) }

View File

@@ -2,7 +2,7 @@ package gq.kirmanak.mealient.data.baseurl
import androidx.datastore.preferences.core.stringPreferencesKey
import com.google.common.truth.Truth.assertThat
import gq.kirmanak.mealient.data.baseurl.impl.BaseURLStorageImpl
import gq.kirmanak.mealient.data.baseurl.impl.ServerInfoStorageImpl
import gq.kirmanak.mealient.data.storage.PreferencesStorage
import io.mockk.MockKAnnotations
import io.mockk.coEvery
@@ -15,19 +15,19 @@ import org.junit.Before
import org.junit.Test
@OptIn(ExperimentalCoroutinesApi::class)
class BaseURLStorageImplTest {
class ServerInfoStorageImplTest {
@MockK(relaxUnitFun = true)
lateinit var preferencesStorage: PreferencesStorage
lateinit var subject: BaseURLStorage
lateinit var subject: ServerInfoStorage
private val baseUrlKey = stringPreferencesKey("baseUrlKey")
@Before
fun setUp() {
MockKAnnotations.init(this)
subject = BaseURLStorageImpl(preferencesStorage)
subject = ServerInfoStorageImpl(preferencesStorage)
every { preferencesStorage.baseUrlKey } returns baseUrlKey
}

View File

@@ -1,7 +1,7 @@
package gq.kirmanak.mealient.data.network
import gq.kirmanak.mealient.data.auth.AuthRepo
import gq.kirmanak.mealient.data.baseurl.BaseURLStorage
import gq.kirmanak.mealient.data.baseurl.ServerInfoStorage
import gq.kirmanak.mealient.datasource.NetworkError
import gq.kirmanak.mealient.datasource.v0.MealieDataSourceV0
import gq.kirmanak.mealient.test.AuthImplTestData.TEST_AUTH_HEADER
@@ -21,7 +21,7 @@ import java.io.IOException
class MealieDataSourceV0WrapperTest {
@MockK
lateinit var baseURLStorage: BaseURLStorage
lateinit var serverInfoStorage: ServerInfoStorage
@MockK(relaxUnitFun = true)
lateinit var authRepo: AuthRepo
@@ -34,12 +34,12 @@ class MealieDataSourceV0WrapperTest {
@Before
fun setUp() {
MockKAnnotations.init(this)
subject = MealieDataSourceWrapper(baseURLStorage, authRepo, mealieDataSourceV0)
subject = MealieDataSourceWrapper(serverInfoStorage, authRepo, mealieDataSourceV0)
}
@Test
fun `when withAuthHeader fails with Unauthorized then invalidates auth`() = runTest {
coEvery { baseURLStorage.requireBaseURL() } returns TEST_BASE_URL
coEvery { serverInfoStorage.requireBaseURL() } returns TEST_BASE_URL
coEvery { authRepo.getAuthHeader() } returns null andThen TEST_AUTH_HEADER
coEvery {
mealieDataSourceV0.requestRecipeInfo(eq(TEST_BASE_URL), isNull(), eq("cake"))

View File

@@ -1,7 +1,7 @@
package gq.kirmanak.mealient.data.recipes.impl
import com.google.common.truth.Truth.assertThat
import gq.kirmanak.mealient.data.baseurl.BaseURLStorage
import gq.kirmanak.mealient.data.baseurl.ServerInfoStorage
import gq.kirmanak.mealient.logging.Logger
import io.mockk.MockKAnnotations
import io.mockk.coEvery
@@ -17,7 +17,7 @@ class RecipeImageUrlProviderImplTest {
lateinit var subject: RecipeImageUrlProvider
@MockK
lateinit var baseURLStorage: BaseURLStorage
lateinit var serverInfoStorage: ServerInfoStorage
@MockK(relaxUnitFun = true)
lateinit var logger: Logger
@@ -25,7 +25,7 @@ class RecipeImageUrlProviderImplTest {
@Before
fun setUp() {
MockKAnnotations.init(this)
subject = RecipeImageUrlProviderImpl(baseURLStorage, logger)
subject = RecipeImageUrlProviderImpl(serverInfoStorage, logger)
prepareBaseURL("https://google.com/")
}
@@ -81,6 +81,6 @@ class RecipeImageUrlProviderImplTest {
}
private fun prepareBaseURL(baseURL: String?) {
coEvery { baseURLStorage.getBaseURL() } returns baseURL
coEvery { serverInfoStorage.getBaseURL() } returns baseURL
}
}

View File

@@ -1,6 +1,6 @@
package gq.kirmanak.mealient.ui.baseurl
import gq.kirmanak.mealient.data.baseurl.BaseURLStorage
import gq.kirmanak.mealient.data.baseurl.ServerInfoStorage
import gq.kirmanak.mealient.data.baseurl.VersionDataSource
import gq.kirmanak.mealient.data.baseurl.VersionInfo
import gq.kirmanak.mealient.logging.Logger
@@ -21,7 +21,7 @@ import org.junit.Test
class BaseURLViewModelTest : RobolectricTest() {
@MockK(relaxUnitFun = true)
lateinit var baseURLStorage: BaseURLStorage
lateinit var serverInfoStorage: ServerInfoStorage
@MockK
lateinit var versionDataSource: VersionDataSource
@@ -34,7 +34,7 @@ class BaseURLViewModelTest : RobolectricTest() {
@Before
fun setUp() {
MockKAnnotations.init(this)
subject = BaseURLViewModel(baseURLStorage, versionDataSource, logger)
subject = BaseURLViewModel(serverInfoStorage, versionDataSource, logger)
}
@Test
@@ -44,6 +44,6 @@ class BaseURLViewModelTest : RobolectricTest() {
} returns VersionInfo(TEST_VERSION)
subject.saveBaseUrl(TEST_BASE_URL)
advanceUntilIdle()
coVerify { baseURLStorage.storeBaseURL(eq(TEST_BASE_URL), eq(TEST_VERSION)) }
coVerify { serverInfoStorage.storeBaseURL(eq(TEST_BASE_URL), eq(TEST_VERSION)) }
}
}