From 3e838aba858f4cf02515016837ce9a5ac8127b7f Mon Sep 17 00:00:00 2001 From: Kirill Kamakin Date: Sun, 7 Aug 2022 13:16:28 +0200 Subject: [PATCH] Add MealieDataSourceWrapperTest --- .../network/MealieDataSourceWrapperTest.kt | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 app/src/test/java/gq/kirmanak/mealient/data/network/MealieDataSourceWrapperTest.kt diff --git a/app/src/test/java/gq/kirmanak/mealient/data/network/MealieDataSourceWrapperTest.kt b/app/src/test/java/gq/kirmanak/mealient/data/network/MealieDataSourceWrapperTest.kt new file mode 100644 index 0000000..743aa5a --- /dev/null +++ b/app/src/test/java/gq/kirmanak/mealient/data/network/MealieDataSourceWrapperTest.kt @@ -0,0 +1,58 @@ +package gq.kirmanak.mealient.data.network + +import gq.kirmanak.mealient.data.auth.AuthRepo +import gq.kirmanak.mealient.data.baseurl.BaseURLStorage +import gq.kirmanak.mealient.datasource.MealieDataSource +import gq.kirmanak.mealient.datasource.models.NetworkError +import gq.kirmanak.mealient.test.AuthImplTestData.TEST_AUTH_HEADER +import gq.kirmanak.mealient.test.AuthImplTestData.TEST_BASE_URL +import gq.kirmanak.mealient.test.RecipeImplTestData.GET_CAKE_RESPONSE +import io.mockk.MockKAnnotations +import io.mockk.coEvery +import io.mockk.coVerifyAll +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 + +@OptIn(ExperimentalCoroutinesApi::class) +class MealieDataSourceWrapperTest { + + @MockK + lateinit var baseURLStorage: BaseURLStorage + + @MockK(relaxUnitFun = true) + lateinit var authRepo: AuthRepo + + @MockK + lateinit var mealieDataSource: MealieDataSource + + lateinit var subject: MealieDataSourceWrapper + + @Before + fun setUp() { + MockKAnnotations.init(this) + subject = MealieDataSourceWrapper(baseURLStorage, authRepo, mealieDataSource) + } + + @Test + fun `when withAuthHeader fails with Unauthorized then invalidates auth`() = runTest { + coEvery { baseURLStorage.requireBaseURL() } returns TEST_BASE_URL + coEvery { authRepo.getAuthHeader() } returns null andThen TEST_AUTH_HEADER + coEvery { + mealieDataSource.requestRecipeInfo(eq(TEST_BASE_URL), isNull(), eq("cake")) + } throws NetworkError.Unauthorized(IOException()) + coEvery { + mealieDataSource.requestRecipeInfo(eq(TEST_BASE_URL), eq(TEST_AUTH_HEADER), eq("cake")) + } returns GET_CAKE_RESPONSE + subject.requestRecipeInfo("cake") + coVerifyAll { + authRepo.getAuthHeader() + authRepo.invalidateAuthHeader() + authRepo.getAuthHeader() + } + } + +} \ No newline at end of file