From fd89dbad3b2a3b0a2645ba2755246d3be9e55724 Mon Sep 17 00:00:00 2001 From: Kirill Kamakin Date: Sun, 11 Dec 2022 18:33:45 +0100 Subject: [PATCH] Add From24AuthMigrationExecutorTest tests --- .../data/auth/impl/AuthStorageImplTest.kt | 4 - .../disclaimer/DisclaimerStorageImplTest.kt | 1 + .../From24AuthMigrationExecutorTest.kt | 81 +++++++++++++++++++ .../mealient/test/HiltRobolectricTest.kt | 3 + 4 files changed, 85 insertions(+), 4 deletions(-) create mode 100644 app/src/test/java/gq/kirmanak/mealient/data/migration/From24AuthMigrationExecutorTest.kt diff --git a/app/src/test/java/gq/kirmanak/mealient/data/auth/impl/AuthStorageImplTest.kt b/app/src/test/java/gq/kirmanak/mealient/data/auth/impl/AuthStorageImplTest.kt index 5b0eab1..8076179 100644 --- a/app/src/test/java/gq/kirmanak/mealient/data/auth/impl/AuthStorageImplTest.kt +++ b/app/src/test/java/gq/kirmanak/mealient/data/auth/impl/AuthStorageImplTest.kt @@ -8,9 +8,7 @@ import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.testing.HiltAndroidTest import gq.kirmanak.mealient.data.auth.AuthStorage import gq.kirmanak.mealient.data.auth.impl.AuthStorageImpl.Companion.AUTH_HEADER_KEY -import gq.kirmanak.mealient.logging.Logger import gq.kirmanak.mealient.test.AuthImplTestData.TEST_AUTH_HEADER -import gq.kirmanak.mealient.test.FakeLogger import gq.kirmanak.mealient.test.HiltRobolectricTest import io.mockk.MockKAnnotations import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -28,8 +26,6 @@ class AuthStorageImplTest : HiltRobolectricTest() { @ApplicationContext lateinit var context: Context - private val logger: Logger = FakeLogger() - lateinit var subject: AuthStorage lateinit var sharedPreferences: SharedPreferences diff --git a/app/src/test/java/gq/kirmanak/mealient/data/disclaimer/DisclaimerStorageImplTest.kt b/app/src/test/java/gq/kirmanak/mealient/data/disclaimer/DisclaimerStorageImplTest.kt index 80a5bb5..dbf6dd1 100644 --- a/app/src/test/java/gq/kirmanak/mealient/data/disclaimer/DisclaimerStorageImplTest.kt +++ b/app/src/test/java/gq/kirmanak/mealient/data/disclaimer/DisclaimerStorageImplTest.kt @@ -11,6 +11,7 @@ import javax.inject.Inject @OptIn(ExperimentalCoroutinesApi::class) @HiltAndroidTest class DisclaimerStorageImplTest : HiltRobolectricTest() { + @Inject lateinit var subject: DisclaimerStorageImpl diff --git a/app/src/test/java/gq/kirmanak/mealient/data/migration/From24AuthMigrationExecutorTest.kt b/app/src/test/java/gq/kirmanak/mealient/data/migration/From24AuthMigrationExecutorTest.kt new file mode 100644 index 0000000..23098a9 --- /dev/null +++ b/app/src/test/java/gq/kirmanak/mealient/data/migration/From24AuthMigrationExecutorTest.kt @@ -0,0 +1,81 @@ +package gq.kirmanak.mealient.data.migration + +import android.content.Context +import android.content.SharedPreferences +import androidx.core.content.edit +import com.google.common.truth.Truth.assertThat +import dagger.hilt.android.qualifiers.ApplicationContext +import dagger.hilt.android.testing.HiltAndroidTest +import gq.kirmanak.mealient.data.auth.AuthRepo +import gq.kirmanak.mealient.test.HiltRobolectricTest +import io.mockk.MockKAnnotations +import io.mockk.coEvery +import io.mockk.coVerify +import io.mockk.impl.annotations.MockK +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.runTest +import org.junit.Before +import org.junit.Test +import java.io.IOException +import javax.inject.Inject + +@OptIn(ExperimentalCoroutinesApi::class) +@HiltAndroidTest +class From24AuthMigrationExecutorTest : HiltRobolectricTest() { + + @Inject + @ApplicationContext + lateinit var context: Context + + @MockK(relaxUnitFun = true) + lateinit var authRepo: AuthRepo + + private lateinit var subject: MigrationExecutor + private lateinit var sharedPreferences: SharedPreferences + + @Before + fun setUp() { + MockKAnnotations.init(this) + sharedPreferences = context.getSharedPreferences("test", Context.MODE_PRIVATE) + subject = From24AuthMigrationExecutor(sharedPreferences, authRepo, logger) + } + + @Test + fun `when there were email and password expect authentication`() = runTest { + sharedPreferences.edit(commit = true) { + putString("email", "email_value") + putString("password", "pass_value") + } + subject.executeMigration() + coVerify { authRepo.authenticate(eq("email_value"), eq("pass_value")) } + } + + @Test + fun `when there were email and password expect them gone`() = runTest { + sharedPreferences.edit(commit = true) { + putString("email", "email_value") + putString("password", "pass_value") + } + subject.executeMigration() + assertThat(sharedPreferences.getString("email", null)).isNull() + assertThat(sharedPreferences.getString("password", null)).isNull() + } + + @Test + fun `when there is email and password but authenticate fails expect values gone`() = runTest { + sharedPreferences.edit(commit = true) { + putString("email", "email_value") + putString("password", "pass_value") + } + coEvery { authRepo.authenticate(any(), any()) } throws IOException() + subject.executeMigration() + assertThat(sharedPreferences.getString("email", null)).isNull() + assertThat(sharedPreferences.getString("password", null)).isNull() + } + + @Test + fun `when there was no email and password expect no authentication`() = runTest { + subject.executeMigration() + coVerify(inverse = true) { authRepo.authenticate(any(), any()) } + } +} \ No newline at end of file diff --git a/testing/src/main/kotlin/gq/kirmanak/mealient/test/HiltRobolectricTest.kt b/testing/src/main/kotlin/gq/kirmanak/mealient/test/HiltRobolectricTest.kt index 0fd38d7..63aee1f 100644 --- a/testing/src/main/kotlin/gq/kirmanak/mealient/test/HiltRobolectricTest.kt +++ b/testing/src/main/kotlin/gq/kirmanak/mealient/test/HiltRobolectricTest.kt @@ -3,6 +3,7 @@ package gq.kirmanak.mealient.test import androidx.test.ext.junit.runners.AndroidJUnit4 import dagger.hilt.android.testing.HiltAndroidRule import dagger.hilt.android.testing.HiltTestApplication +import gq.kirmanak.mealient.logging.Logger import org.junit.Before import org.junit.Rule import org.junit.runner.RunWith @@ -15,6 +16,8 @@ abstract class HiltRobolectricTest { @get:Rule var hiltRule = HiltAndroidRule(this) + protected val logger: Logger = FakeLogger() + @Before fun inject() { hiltRule.inject()