From dd33004c6fa91cb466cb3b5377d0f0031359875c Mon Sep 17 00:00:00 2001 From: Kirill Kamakin Date: Sat, 20 Nov 2021 00:43:00 +0300 Subject: [PATCH] Add loadRecipeInfo tests --- .../data/auth/impl/AuthDataSourceImplTest.kt | 13 +- .../mealie/data/auth/impl/AuthRepoImplTest.kt | 11 +- .../data/auth/impl/AuthStorageImplTest.kt | 5 +- .../mealie/data/impl/OkHttpBuilderTest.kt | 4 +- .../data/recipes/db/RecipeStorageImplTest.kt | 28 ++--- .../data/recipes/impl/RecipeRepoImplTest.kt | 54 ++++++++ .../recipes/impl/RecipesRemoteMediatorTest.kt | 37 ++---- .../{auth/impl => test}/AuthImplTestData.kt | 2 +- .../impl => test}/HiltRobolectricTest.kt | 17 ++- .../{auth/impl => test}/MockServerTest.kt | 2 +- .../data/test/MockServerWithAuthTest.kt | 21 ++++ .../{recipes => test}/RecipeImplTestData.kt | 116 +++++++++++++++++- 12 files changed, 250 insertions(+), 60 deletions(-) create mode 100644 app/src/test/java/gq/kirmanak/mealie/data/recipes/impl/RecipeRepoImplTest.kt rename app/src/test/java/gq/kirmanak/mealie/data/{auth/impl => test}/AuthImplTestData.kt (96%) rename app/src/test/java/gq/kirmanak/mealie/data/{auth/impl => test}/HiltRobolectricTest.kt (54%) rename app/src/test/java/gq/kirmanak/mealie/data/{auth/impl => test}/MockServerTest.kt (91%) create mode 100644 app/src/test/java/gq/kirmanak/mealie/data/test/MockServerWithAuthTest.kt rename app/src/test/java/gq/kirmanak/mealie/data/{recipes => test}/RecipeImplTestData.kt (71%) diff --git a/app/src/test/java/gq/kirmanak/mealie/data/auth/impl/AuthDataSourceImplTest.kt b/app/src/test/java/gq/kirmanak/mealie/data/auth/impl/AuthDataSourceImplTest.kt index 73d6f91..8535f29 100644 --- a/app/src/test/java/gq/kirmanak/mealie/data/auth/impl/AuthDataSourceImplTest.kt +++ b/app/src/test/java/gq/kirmanak/mealie/data/auth/impl/AuthDataSourceImplTest.kt @@ -2,12 +2,13 @@ package gq.kirmanak.mealie.data.auth.impl import com.google.common.truth.Truth.assertThat import dagger.hilt.android.testing.HiltAndroidTest -import gq.kirmanak.mealie.data.auth.impl.AuthImplTestData.TEST_PASSWORD -import gq.kirmanak.mealie.data.auth.impl.AuthImplTestData.TEST_TOKEN -import gq.kirmanak.mealie.data.auth.impl.AuthImplTestData.TEST_USERNAME -import gq.kirmanak.mealie.data.auth.impl.AuthImplTestData.body -import gq.kirmanak.mealie.data.auth.impl.AuthImplTestData.enqueueSuccessfulAuthResponse -import gq.kirmanak.mealie.data.auth.impl.AuthImplTestData.enqueueUnsuccessfulAuthResponse +import gq.kirmanak.mealie.data.test.AuthImplTestData.TEST_PASSWORD +import gq.kirmanak.mealie.data.test.AuthImplTestData.TEST_TOKEN +import gq.kirmanak.mealie.data.test.AuthImplTestData.TEST_USERNAME +import gq.kirmanak.mealie.data.test.AuthImplTestData.body +import gq.kirmanak.mealie.data.test.AuthImplTestData.enqueueSuccessfulAuthResponse +import gq.kirmanak.mealie.data.test.AuthImplTestData.enqueueUnsuccessfulAuthResponse +import gq.kirmanak.mealie.data.test.MockServerTest import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.runBlocking import kotlinx.serialization.ExperimentalSerializationApi diff --git a/app/src/test/java/gq/kirmanak/mealie/data/auth/impl/AuthRepoImplTest.kt b/app/src/test/java/gq/kirmanak/mealie/data/auth/impl/AuthRepoImplTest.kt index 1b7b360..1cea4d2 100644 --- a/app/src/test/java/gq/kirmanak/mealie/data/auth/impl/AuthRepoImplTest.kt +++ b/app/src/test/java/gq/kirmanak/mealie/data/auth/impl/AuthRepoImplTest.kt @@ -2,11 +2,12 @@ package gq.kirmanak.mealie.data.auth.impl import com.google.common.truth.Truth.assertThat import dagger.hilt.android.testing.HiltAndroidTest -import gq.kirmanak.mealie.data.auth.impl.AuthImplTestData.TEST_PASSWORD -import gq.kirmanak.mealie.data.auth.impl.AuthImplTestData.TEST_TOKEN -import gq.kirmanak.mealie.data.auth.impl.AuthImplTestData.TEST_USERNAME -import gq.kirmanak.mealie.data.auth.impl.AuthImplTestData.enqueueSuccessfulAuthResponse -import gq.kirmanak.mealie.data.auth.impl.AuthImplTestData.enqueueUnsuccessfulAuthResponse +import gq.kirmanak.mealie.data.test.AuthImplTestData.TEST_PASSWORD +import gq.kirmanak.mealie.data.test.AuthImplTestData.TEST_TOKEN +import gq.kirmanak.mealie.data.test.AuthImplTestData.TEST_USERNAME +import gq.kirmanak.mealie.data.test.AuthImplTestData.enqueueSuccessfulAuthResponse +import gq.kirmanak.mealie.data.test.AuthImplTestData.enqueueUnsuccessfulAuthResponse +import gq.kirmanak.mealie.data.test.MockServerTest import kotlinx.coroutines.flow.first import kotlinx.coroutines.runBlocking import org.junit.Test diff --git a/app/src/test/java/gq/kirmanak/mealie/data/auth/impl/AuthStorageImplTest.kt b/app/src/test/java/gq/kirmanak/mealie/data/auth/impl/AuthStorageImplTest.kt index 151e451..57c024c 100644 --- a/app/src/test/java/gq/kirmanak/mealie/data/auth/impl/AuthStorageImplTest.kt +++ b/app/src/test/java/gq/kirmanak/mealie/data/auth/impl/AuthStorageImplTest.kt @@ -2,8 +2,9 @@ package gq.kirmanak.mealie.data.auth.impl import com.google.common.truth.Truth.assertThat import dagger.hilt.android.testing.HiltAndroidTest -import gq.kirmanak.mealie.data.auth.impl.AuthImplTestData.TEST_TOKEN -import gq.kirmanak.mealie.data.auth.impl.AuthImplTestData.TEST_URL +import gq.kirmanak.mealie.data.test.AuthImplTestData.TEST_TOKEN +import gq.kirmanak.mealie.data.test.AuthImplTestData.TEST_URL +import gq.kirmanak.mealie.data.test.HiltRobolectricTest import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.first import kotlinx.coroutines.runBlocking diff --git a/app/src/test/java/gq/kirmanak/mealie/data/impl/OkHttpBuilderTest.kt b/app/src/test/java/gq/kirmanak/mealie/data/impl/OkHttpBuilderTest.kt index 0c0cb1f..adfb7b2 100644 --- a/app/src/test/java/gq/kirmanak/mealie/data/impl/OkHttpBuilderTest.kt +++ b/app/src/test/java/gq/kirmanak/mealie/data/impl/OkHttpBuilderTest.kt @@ -3,8 +3,8 @@ package gq.kirmanak.mealie.data.impl import com.google.common.truth.Truth.assertThat import dagger.hilt.android.testing.HiltAndroidTest import gq.kirmanak.mealie.data.auth.impl.AUTHORIZATION_HEADER -import gq.kirmanak.mealie.data.auth.impl.AuthImplTestData.TEST_TOKEN -import gq.kirmanak.mealie.data.auth.impl.MockServerTest +import gq.kirmanak.mealie.data.test.AuthImplTestData.TEST_TOKEN +import gq.kirmanak.mealie.data.test.MockServerTest import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.mockwebserver.MockResponse diff --git a/app/src/test/java/gq/kirmanak/mealie/data/recipes/db/RecipeStorageImplTest.kt b/app/src/test/java/gq/kirmanak/mealie/data/recipes/db/RecipeStorageImplTest.kt index fdc990c..0b40471 100644 --- a/app/src/test/java/gq/kirmanak/mealie/data/recipes/db/RecipeStorageImplTest.kt +++ b/app/src/test/java/gq/kirmanak/mealie/data/recipes/db/RecipeStorageImplTest.kt @@ -3,24 +3,24 @@ package gq.kirmanak.mealie.data.recipes.db import com.google.common.truth.Truth.assertThat import dagger.hilt.android.testing.HiltAndroidTest import gq.kirmanak.mealie.data.MealieDb -import gq.kirmanak.mealie.data.auth.impl.HiltRobolectricTest -import gq.kirmanak.mealie.data.recipes.RecipeImplTestData.BREAD_INGREDIENT -import gq.kirmanak.mealie.data.recipes.RecipeImplTestData.CAKE_BREAD_RECIPE_INGREDIENT_ENTITY -import gq.kirmanak.mealie.data.recipes.RecipeImplTestData.CAKE_RECIPE_SUMMARY_ENTITY -import gq.kirmanak.mealie.data.recipes.RecipeImplTestData.FULL_CAKE_INFO_ENTITY -import gq.kirmanak.mealie.data.recipes.RecipeImplTestData.FULL_PORRIDGE_INFO_ENTITY -import gq.kirmanak.mealie.data.recipes.RecipeImplTestData.GET_CAKE_RESPONSE -import gq.kirmanak.mealie.data.recipes.RecipeImplTestData.GET_PORRIDGE_RESPONSE -import gq.kirmanak.mealie.data.recipes.RecipeImplTestData.MIX_CAKE_RECIPE_INSTRUCTION_ENTITY -import gq.kirmanak.mealie.data.recipes.RecipeImplTestData.MIX_INSTRUCTION -import gq.kirmanak.mealie.data.recipes.RecipeImplTestData.PORRIDGE_RECIPE_SUMMARY_ENTITY -import gq.kirmanak.mealie.data.recipes.RecipeImplTestData.RECIPE_SUMMARY_CAKE -import gq.kirmanak.mealie.data.recipes.RecipeImplTestData.RECIPE_SUMMARY_PORRIDGE -import gq.kirmanak.mealie.data.recipes.RecipeImplTestData.TEST_RECIPE_SUMMARIES import gq.kirmanak.mealie.data.recipes.db.entity.CategoryEntity import gq.kirmanak.mealie.data.recipes.db.entity.CategoryRecipeEntity import gq.kirmanak.mealie.data.recipes.db.entity.TagEntity import gq.kirmanak.mealie.data.recipes.db.entity.TagRecipeEntity +import gq.kirmanak.mealie.data.test.HiltRobolectricTest +import gq.kirmanak.mealie.data.test.RecipeImplTestData.BREAD_INGREDIENT +import gq.kirmanak.mealie.data.test.RecipeImplTestData.CAKE_BREAD_RECIPE_INGREDIENT_ENTITY +import gq.kirmanak.mealie.data.test.RecipeImplTestData.CAKE_RECIPE_SUMMARY_ENTITY +import gq.kirmanak.mealie.data.test.RecipeImplTestData.FULL_CAKE_INFO_ENTITY +import gq.kirmanak.mealie.data.test.RecipeImplTestData.FULL_PORRIDGE_INFO_ENTITY +import gq.kirmanak.mealie.data.test.RecipeImplTestData.GET_CAKE_RESPONSE +import gq.kirmanak.mealie.data.test.RecipeImplTestData.GET_PORRIDGE_RESPONSE +import gq.kirmanak.mealie.data.test.RecipeImplTestData.MIX_CAKE_RECIPE_INSTRUCTION_ENTITY +import gq.kirmanak.mealie.data.test.RecipeImplTestData.MIX_INSTRUCTION +import gq.kirmanak.mealie.data.test.RecipeImplTestData.PORRIDGE_RECIPE_SUMMARY_ENTITY +import gq.kirmanak.mealie.data.test.RecipeImplTestData.RECIPE_SUMMARY_CAKE +import gq.kirmanak.mealie.data.test.RecipeImplTestData.RECIPE_SUMMARY_PORRIDGE +import gq.kirmanak.mealie.data.test.RecipeImplTestData.TEST_RECIPE_SUMMARIES import kotlinx.coroutines.runBlocking import org.junit.Test import javax.inject.Inject diff --git a/app/src/test/java/gq/kirmanak/mealie/data/recipes/impl/RecipeRepoImplTest.kt b/app/src/test/java/gq/kirmanak/mealie/data/recipes/impl/RecipeRepoImplTest.kt new file mode 100644 index 0000000..415e961 --- /dev/null +++ b/app/src/test/java/gq/kirmanak/mealie/data/recipes/impl/RecipeRepoImplTest.kt @@ -0,0 +1,54 @@ +package gq.kirmanak.mealie.data.recipes.impl + +import com.google.common.truth.Truth.assertThat +import dagger.hilt.android.testing.HiltAndroidTest +import gq.kirmanak.mealie.data.MealieDb +import gq.kirmanak.mealie.data.recipes.RecipeRepo +import gq.kirmanak.mealie.data.recipes.db.RecipeStorage +import gq.kirmanak.mealie.data.test.MockServerWithAuthTest +import gq.kirmanak.mealie.data.test.RecipeImplTestData.FULL_CAKE_INFO_ENTITY +import gq.kirmanak.mealie.data.test.RecipeImplTestData.RECIPE_SUMMARY_CAKE +import gq.kirmanak.mealie.data.test.RecipeImplTestData.enqueueSuccessfulGetRecipe +import gq.kirmanak.mealie.data.test.RecipeImplTestData.enqueueUnsuccessfulRecipeResponse +import kotlinx.coroutines.runBlocking +import org.junit.Test +import javax.inject.Inject + +@HiltAndroidTest +class RecipeRepoImplTest : MockServerWithAuthTest() { + @Inject + lateinit var subject: RecipeRepo + + @Inject + lateinit var storage: RecipeStorage + + @Inject + lateinit var mealieDb: MealieDb + + @Test + fun `when loadRecipeInfo then loads recipe`(): Unit = runBlocking { + storage.saveRecipes(listOf(RECIPE_SUMMARY_CAKE)) + mockServer.enqueueSuccessfulGetRecipe() + val actual = subject.loadRecipeInfo(1, "cake") + assertThat(actual).isEqualTo(FULL_CAKE_INFO_ENTITY) + } + + @Test + fun `when loadRecipeInfo then saves to DB`(): Unit = runBlocking { + storage.saveRecipes(listOf(RECIPE_SUMMARY_CAKE)) + mockServer.enqueueSuccessfulGetRecipe() + subject.loadRecipeInfo(1, "cake") + val actual = mealieDb.recipeDao().queryFullRecipeInfo(1) + assertThat(actual).isEqualTo(FULL_CAKE_INFO_ENTITY) + } + + @Test + fun `when loadRecipeInfo with error then loads from DB`(): Unit = runBlocking { + storage.saveRecipes(listOf(RECIPE_SUMMARY_CAKE)) + mockServer.enqueueSuccessfulGetRecipe() + subject.loadRecipeInfo(1, "cake") + mockServer.enqueueUnsuccessfulRecipeResponse() + val actual = subject.loadRecipeInfo(1, "cake") + assertThat(actual).isEqualTo(FULL_CAKE_INFO_ENTITY) + } +} \ No newline at end of file diff --git a/app/src/test/java/gq/kirmanak/mealie/data/recipes/impl/RecipesRemoteMediatorTest.kt b/app/src/test/java/gq/kirmanak/mealie/data/recipes/impl/RecipesRemoteMediatorTest.kt index db7e07e..582f183 100644 --- a/app/src/test/java/gq/kirmanak/mealie/data/recipes/impl/RecipesRemoteMediatorTest.kt +++ b/app/src/test/java/gq/kirmanak/mealie/data/recipes/impl/RecipesRemoteMediatorTest.kt @@ -5,25 +5,20 @@ import androidx.paging.LoadType.* import com.google.common.truth.Truth.assertThat import dagger.hilt.android.testing.HiltAndroidTest import gq.kirmanak.mealie.data.MealieDb -import gq.kirmanak.mealie.data.auth.AuthRepo -import gq.kirmanak.mealie.data.auth.impl.AuthImplTestData.TEST_PASSWORD -import gq.kirmanak.mealie.data.auth.impl.AuthImplTestData.TEST_USERNAME -import gq.kirmanak.mealie.data.auth.impl.AuthImplTestData.enqueueSuccessfulAuthResponse -import gq.kirmanak.mealie.data.auth.impl.MockServerTest -import gq.kirmanak.mealie.data.recipes.RecipeImplTestData.CAKE_RECIPE_SUMMARY_ENTITY -import gq.kirmanak.mealie.data.recipes.RecipeImplTestData.PORRIDGE_RECIPE_SUMMARY_ENTITY -import gq.kirmanak.mealie.data.recipes.RecipeImplTestData.TEST_RECIPE_ENTITIES -import gq.kirmanak.mealie.data.recipes.RecipeImplTestData.enqueueSuccessfulRecipeSummaryResponse -import gq.kirmanak.mealie.data.recipes.RecipeImplTestData.enqueueUnsuccessfulRecipeSummaryResponse import gq.kirmanak.mealie.data.recipes.db.entity.RecipeSummaryEntity +import gq.kirmanak.mealie.data.test.MockServerWithAuthTest +import gq.kirmanak.mealie.data.test.RecipeImplTestData.CAKE_RECIPE_SUMMARY_ENTITY +import gq.kirmanak.mealie.data.test.RecipeImplTestData.PORRIDGE_RECIPE_SUMMARY_ENTITY +import gq.kirmanak.mealie.data.test.RecipeImplTestData.TEST_RECIPE_ENTITIES +import gq.kirmanak.mealie.data.test.RecipeImplTestData.enqueueSuccessfulRecipeSummaryResponse +import gq.kirmanak.mealie.data.test.RecipeImplTestData.enqueueUnsuccessfulRecipeResponse import kotlinx.coroutines.runBlocking -import org.junit.Before import org.junit.Test import javax.inject.Inject @ExperimentalPagingApi @HiltAndroidTest -class RecipesRemoteMediatorTest : MockServerTest() { +class RecipesRemoteMediatorTest : MockServerWithAuthTest() { private val pagingConfig = PagingConfig( pageSize = 2, prefetchDistance = 5, @@ -33,19 +28,9 @@ class RecipesRemoteMediatorTest : MockServerTest() { @Inject lateinit var subject: RecipesRemoteMediator - @Inject - lateinit var authRepo: AuthRepo - @Inject lateinit var mealieDb: MealieDb - @Before - fun authenticate(): Unit = runBlocking { - mockServer.enqueueSuccessfulAuthResponse() - authRepo.authenticate(TEST_USERNAME, TEST_PASSWORD, serverUrl) - mockServer.takeRequest() - } - @Test fun `when first load with refresh successful then result success`(): Unit = runBlocking { mockServer.enqueueSuccessfulRecipeSummaryResponse() @@ -86,7 +71,7 @@ class RecipesRemoteMediatorTest : MockServerTest() { @Test fun `when load fails then lastRequestEnd still 0`(): Unit = runBlocking { - mockServer.enqueueUnsuccessfulRecipeSummaryResponse() + mockServer.enqueueUnsuccessfulRecipeResponse() subject.load(REFRESH, pagingState()) val actual = subject.lastRequestEnd assertThat(actual).isEqualTo(0) @@ -94,14 +79,14 @@ class RecipesRemoteMediatorTest : MockServerTest() { @Test fun `when load fails then result is error`(): Unit = runBlocking { - mockServer.enqueueUnsuccessfulRecipeSummaryResponse() + mockServer.enqueueUnsuccessfulRecipeResponse() val actual = subject.load(REFRESH, pagingState()) assertThat(actual).isInstanceOf(RemoteMediator.MediatorResult.Error::class.java) } @Test fun `when refresh then request params correct`(): Unit = runBlocking { - mockServer.enqueueUnsuccessfulRecipeSummaryResponse() + mockServer.enqueueUnsuccessfulRecipeResponse() subject.load(REFRESH, pagingState()) val actual = mockServer.takeRequest().path assertThat(actual).isEqualTo("/api/recipes/summary?start=0&limit=6") @@ -123,7 +108,7 @@ class RecipesRemoteMediatorTest : MockServerTest() { mockServer.enqueueSuccessfulRecipeSummaryResponse() subject.load(REFRESH, pagingState()) mockServer.takeRequest() - mockServer.enqueueUnsuccessfulRecipeSummaryResponse() + mockServer.enqueueUnsuccessfulRecipeResponse() subject.load(APPEND, pagingState()) val actual = mealieDb.recipeDao().queryAllRecipes() assertThat(actual).isEqualTo(TEST_RECIPE_ENTITIES) diff --git a/app/src/test/java/gq/kirmanak/mealie/data/auth/impl/AuthImplTestData.kt b/app/src/test/java/gq/kirmanak/mealie/data/test/AuthImplTestData.kt similarity index 96% rename from app/src/test/java/gq/kirmanak/mealie/data/auth/impl/AuthImplTestData.kt rename to app/src/test/java/gq/kirmanak/mealie/data/test/AuthImplTestData.kt index 00077aa..15f2b4a 100644 --- a/app/src/test/java/gq/kirmanak/mealie/data/auth/impl/AuthImplTestData.kt +++ b/app/src/test/java/gq/kirmanak/mealie/data/test/AuthImplTestData.kt @@ -1,4 +1,4 @@ -package gq.kirmanak.mealie.data.auth.impl +package gq.kirmanak.mealie.data.test import okhttp3.mockwebserver.MockResponse import okhttp3.mockwebserver.MockWebServer diff --git a/app/src/test/java/gq/kirmanak/mealie/data/auth/impl/HiltRobolectricTest.kt b/app/src/test/java/gq/kirmanak/mealie/data/test/HiltRobolectricTest.kt similarity index 54% rename from app/src/test/java/gq/kirmanak/mealie/data/auth/impl/HiltRobolectricTest.kt rename to app/src/test/java/gq/kirmanak/mealie/data/test/HiltRobolectricTest.kt index 4429b0a..7072866 100644 --- a/app/src/test/java/gq/kirmanak/mealie/data/auth/impl/HiltRobolectricTest.kt +++ b/app/src/test/java/gq/kirmanak/mealie/data/test/HiltRobolectricTest.kt @@ -1,16 +1,31 @@ -package gq.kirmanak.mealie.data.auth.impl +package gq.kirmanak.mealie.data.test import androidx.test.ext.junit.runners.AndroidJUnit4 import dagger.hilt.android.testing.HiltAndroidRule import dagger.hilt.android.testing.HiltTestApplication import org.junit.Before +import org.junit.BeforeClass import org.junit.Rule import org.junit.runner.RunWith import org.robolectric.annotation.Config +import timber.log.Timber @RunWith(AndroidJUnit4::class) @Config(application = HiltTestApplication::class, manifest = Config.NONE) abstract class HiltRobolectricTest { + companion object { + @BeforeClass + @JvmStatic + fun setupTimber() { + Timber.plant(object : Timber.Tree() { + override fun log(priority: Int, tag: String?, message: String, t: Throwable?) { + println(message) + t?.printStackTrace() + } + }) + } + } + @get:Rule var hiltRule = HiltAndroidRule(this) diff --git a/app/src/test/java/gq/kirmanak/mealie/data/auth/impl/MockServerTest.kt b/app/src/test/java/gq/kirmanak/mealie/data/test/MockServerTest.kt similarity index 91% rename from app/src/test/java/gq/kirmanak/mealie/data/auth/impl/MockServerTest.kt rename to app/src/test/java/gq/kirmanak/mealie/data/test/MockServerTest.kt index 0b3b1df..a71d574 100644 --- a/app/src/test/java/gq/kirmanak/mealie/data/auth/impl/MockServerTest.kt +++ b/app/src/test/java/gq/kirmanak/mealie/data/test/MockServerTest.kt @@ -1,4 +1,4 @@ -package gq.kirmanak.mealie.data.auth.impl +package gq.kirmanak.mealie.data.test import okhttp3.mockwebserver.MockWebServer import org.junit.After diff --git a/app/src/test/java/gq/kirmanak/mealie/data/test/MockServerWithAuthTest.kt b/app/src/test/java/gq/kirmanak/mealie/data/test/MockServerWithAuthTest.kt new file mode 100644 index 0000000..88acc90 --- /dev/null +++ b/app/src/test/java/gq/kirmanak/mealie/data/test/MockServerWithAuthTest.kt @@ -0,0 +1,21 @@ +package gq.kirmanak.mealie.data.test + +import gq.kirmanak.mealie.data.auth.AuthRepo +import gq.kirmanak.mealie.data.test.AuthImplTestData.TEST_PASSWORD +import gq.kirmanak.mealie.data.test.AuthImplTestData.TEST_USERNAME +import gq.kirmanak.mealie.data.test.AuthImplTestData.enqueueSuccessfulAuthResponse +import kotlinx.coroutines.runBlocking +import org.junit.Before +import javax.inject.Inject + +abstract class MockServerWithAuthTest : MockServerTest() { + @Inject + lateinit var authRepo: AuthRepo + + @Before + fun authenticate(): Unit = runBlocking { + mockServer.enqueueSuccessfulAuthResponse() + authRepo.authenticate(TEST_USERNAME, TEST_PASSWORD, serverUrl) + mockServer.takeRequest() + } +} \ No newline at end of file diff --git a/app/src/test/java/gq/kirmanak/mealie/data/recipes/RecipeImplTestData.kt b/app/src/test/java/gq/kirmanak/mealie/data/test/RecipeImplTestData.kt similarity index 71% rename from app/src/test/java/gq/kirmanak/mealie/data/recipes/RecipeImplTestData.kt rename to app/src/test/java/gq/kirmanak/mealie/data/test/RecipeImplTestData.kt index d9a0885..1403d67 100644 --- a/app/src/test/java/gq/kirmanak/mealie/data/recipes/RecipeImplTestData.kt +++ b/app/src/test/java/gq/kirmanak/mealie/data/test/RecipeImplTestData.kt @@ -1,4 +1,4 @@ -package gq.kirmanak.mealie.data.recipes +package gq.kirmanak.mealie.data.test import gq.kirmanak.mealie.data.recipes.db.entity.RecipeEntity import gq.kirmanak.mealie.data.recipes.db.entity.RecipeIngredientEntity @@ -106,7 +106,7 @@ object RecipeImplTestData { enqueue(response) } - fun MockWebServer.enqueueUnsuccessfulRecipeSummaryResponse() { + fun MockWebServer.enqueueUnsuccessfulRecipeResponse() { val response = MockResponse() .setBody(RECIPE_SUMMARY_UNSUCCESSFUL) .setHeader("Content-Type", "application/json") @@ -172,6 +172,110 @@ object RecipeImplTestData { recipeInstructions = listOf(MIX_INSTRUCTION, BAKE_INSTRUCTION) ) + val GET_CAKE_RESPONSE_BODY = """ + { + "id": 1, + "name": "Cake", + "slug": "cake", + "image": "86", + "description": "A tasty cake", + "recipeCategory": ["dessert", "tasty"], + "tags": ["gluten", "allergic"], + "rating": 4, + "dateAdded": "2021-11-13", + "dateUpdated": "2021-11-13T15:30:13", + "recipeYield": "4 servings", + "recipeIngredient": [ + { + "title": "Sugar", + "note": "2 oz of white sugar", + "unit": null, + "food": null, + "disableAmount": true, + "quantity": 1 + }, + { + "title": "Bread", + "note": "2 oz of white bread", + "unit": null, + "food": null, + "disableAmount": false, + "quantity": 2 + } + ], + "recipeInstructions": [ + { + "title": "Mix", + "text": "Mix the ingredients" + }, + { + "title": "Bake", + "text": "Bake the ingredients" + } + ], + "nutrition": { + "calories": "100", + "fatContent": "20", + "proteinContent": "30", + "carbohydrateContent": "40", + "fiberContent": "50", + "sodiumContent": "23", + "sugarContent": "53" + }, + "tools": [], + "totalTime": "12 hours", + "prepTime": "1 hour", + "performTime": "4 hours", + "settings": { + "public": true, + "showNutrition": true, + "showAssets": true, + "landscapeView": true, + "disableComments": false, + "disableAmount": false + }, + "assets": [], + "notes": [ + { + "title": "Note title", + "text": "Note text" + }, + { + "title": "Second note", + "text": "Second note text" + } + ], + "orgURL": null, + "extras": {}, + "comments": [ + { + "text": "A new comment", + "id": 1, + "uuid": "476ebc15-f794-4eda-8380-d77bba47f839", + "recipeSlug": "test-recipe", + "dateAdded": "2021-11-19T22:13:23.862459", + "user": { + "id": 1, + "username": "kirmanak", + "admin": true + } + }, + { + "text": "A second comment", + "id": 2, + "uuid": "20498eba-9639-4acd-ba0a-4829ee06915a", + "recipeSlug": "test-recipe", + "dateAdded": "2021-11-19T22:13:29.912314", + "user": { + "id": 1, + "username": "kirmanak", + "admin": true + } + } + ] + } + """.trimIndent() + val GET_PORRIDGE_RESPONSE = GetRecipeResponse( remoteId = 2, name = "Porridge", @@ -295,4 +399,12 @@ object RecipeImplTestData { PORRIDGE_BOIL_RECIPE_INSTRUCTION_ENTITY, ) ) + + fun MockWebServer.enqueueSuccessfulGetRecipe() { + val response = MockResponse() + .setResponseCode(200) + .setHeader("Content-Type", "application/json") + .setBody(GET_CAKE_RESPONSE_BODY) + enqueue(response) + } } \ No newline at end of file