Add ShareRecipeRepoImpl tests

This commit is contained in:
Kirill Kamakin
2022-11-28 21:45:03 +01:00
parent 4826478a2a
commit a0a3862df7
2 changed files with 81 additions and 1 deletions

View File

@@ -12,7 +12,17 @@ class ShareRecipeRepoImpl @Inject constructor(
override suspend fun saveRecipeByURL(url: CharSequence): String {
logger.v { "saveRecipeByURL() called with: url = $url" }
val request = ParseRecipeURLInfo(url = url.toString(), includeTags = true)
val urlStart = url.indexOf("http")
if (urlStart == -1) throw IllegalArgumentException("URL doesn't start with http")
val startsWithUrl = url.subSequence(urlStart, url.length)
val urlEnd = startsWithUrl.indexOfFirst { it.isWhitespace() }
.takeUnless { it == -1 }
?: startsWithUrl.length
val urlString = startsWithUrl.substring(0, urlEnd)
val request = ParseRecipeURLInfo(url = urlString, includeTags = true)
return parseRecipeDataSource.parseRecipeFromURL(request)
}
}

View File

@@ -0,0 +1,70 @@
package gq.kirmanak.mealient.data.share
import gq.kirmanak.mealient.test.BaseUnitTest
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.Test
@OptIn(ExperimentalCoroutinesApi::class)
class ShareRecipeRepoImplTest : BaseUnitTest() {
@MockK(relaxUnitFun = true)
lateinit var parseRecipeDataSource: ParseRecipeDataSource
lateinit var subject: ShareRecipeRepo
override fun setUp() {
super.setUp()
subject = ShareRecipeRepoImpl(logger, parseRecipeDataSource)
coEvery { parseRecipeDataSource.parseRecipeFromURL(any()) } returns ""
}
@Test(expected = IllegalArgumentException::class)
fun `when url is empty expect saveRecipeByURL throws Exception`() = runTest {
subject.saveRecipeByURL("")
}
@Test
fun `when url is correct expect saveRecipeByURL saves it`() = runTest {
subject.saveRecipeByURL("https://www.allrecipes.com/recipe/215447/dads-leftover-turkey-pot-pie/")
val expected = ParseRecipeURLInfo(
url = "https://www.allrecipes.com/recipe/215447/dads-leftover-turkey-pot-pie/",
includeTags = true
)
coVerify { parseRecipeDataSource.parseRecipeFromURL(eq(expected)) }
}
@Test
fun `when url has prefix expect saveRecipeByURL removes it`() = runTest {
subject.saveRecipeByURL("My favorite recipe: https://www.allrecipes.com/recipe/215447/dads-leftover-turkey-pot-pie/")
val expected = ParseRecipeURLInfo(
url = "https://www.allrecipes.com/recipe/215447/dads-leftover-turkey-pot-pie/",
includeTags = true
)
coVerify { parseRecipeDataSource.parseRecipeFromURL(eq(expected)) }
}
@Test
fun `when url has suffix expect saveRecipeByURL removes it`() = runTest {
subject.saveRecipeByURL("https://www.allrecipes.com/recipe/215447/dads-leftover-turkey-pot-pie/ is my favorite recipe")
val expected = ParseRecipeURLInfo(
url = "https://www.allrecipes.com/recipe/215447/dads-leftover-turkey-pot-pie/",
includeTags = true
)
coVerify { parseRecipeDataSource.parseRecipeFromURL(eq(expected)) }
}
@Test
fun `when url has prefix and suffix expect saveRecipeByURL removes them`() = runTest {
subject.saveRecipeByURL("Actually, https://www.allrecipes.com/recipe/215447/dads-leftover-turkey-pot-pie/ is my favorite recipe")
val expected = ParseRecipeURLInfo(
url = "https://www.allrecipes.com/recipe/215447/dads-leftover-turkey-pot-pie/",
includeTags = true
)
coVerify { parseRecipeDataSource.parseRecipeFromURL(eq(expected)) }
}
}