diff --git a/app/src/main/java/gq/kirmanak/mealient/data/share/ShareRecipeRepoImpl.kt b/app/src/main/java/gq/kirmanak/mealient/data/share/ShareRecipeRepoImpl.kt index 15c155d..7d711ae 100644 --- a/app/src/main/java/gq/kirmanak/mealient/data/share/ShareRecipeRepoImpl.kt +++ b/app/src/main/java/gq/kirmanak/mealient/data/share/ShareRecipeRepoImpl.kt @@ -1,5 +1,6 @@ package gq.kirmanak.mealient.data.share +import androidx.core.util.PatternsCompat import gq.kirmanak.mealient.logging.Logger import javax.inject.Inject import javax.inject.Singleton @@ -12,16 +13,9 @@ class ShareRecipeRepoImpl @Inject constructor( override suspend fun saveRecipeByURL(url: CharSequence): String { logger.v { "saveRecipeByURL() called with: url = $url" } - - 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 matcher = PatternsCompat.WEB_URL.matcher(url) + require(matcher.find()) { "Can't find URL in the text" } + val urlString = matcher.group() val request = ParseRecipeURLInfo(url = urlString, includeTags = true) return parseRecipeDataSource.parseRecipeFromURL(request) } diff --git a/app/src/test/java/gq/kirmanak/mealient/data/share/ShareRecipeRepoImplTest.kt b/app/src/test/java/gq/kirmanak/mealient/data/share/ShareRecipeRepoImplTest.kt index 2a83c9b..1f03463 100644 --- a/app/src/test/java/gq/kirmanak/mealient/data/share/ShareRecipeRepoImplTest.kt +++ b/app/src/test/java/gq/kirmanak/mealient/data/share/ShareRecipeRepoImplTest.kt @@ -52,7 +52,7 @@ class ShareRecipeRepoImplTest : BaseUnitTest() { 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/", + url = "https://www.allrecipes.com/recipe/215447/dads-leftover-turkey-pot-pie", includeTags = true ) coVerify { parseRecipeDataSource.parseRecipeFromURL(eq(expected)) } @@ -62,7 +62,7 @@ class ShareRecipeRepoImplTest : BaseUnitTest() { 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/", + url = "https://www.allrecipes.com/recipe/215447/dads-leftover-turkey-pot-pie", includeTags = true ) coVerify { parseRecipeDataSource.parseRecipeFromURL(eq(expected)) }