diff --git a/core-domain/src/main/kotlin/com/svenjacobs/app/leon/core/domain/sanitizer/amazon/AmazonProductSanitizer.kt b/core-domain/src/main/kotlin/com/svenjacobs/app/leon/core/domain/sanitizer/amazon/AmazonProductSanitizer.kt index 56b20f82..984770cd 100644 --- a/core-domain/src/main/kotlin/com/svenjacobs/app/leon/core/domain/sanitizer/amazon/AmazonProductSanitizer.kt +++ b/core-domain/src/main/kotlin/com/svenjacobs/app/leon/core/domain/sanitizer/amazon/AmazonProductSanitizer.kt @@ -19,7 +19,6 @@ package com.svenjacobs.app.leon.core.domain.sanitizer.amazon import android.content.Context -import com.svenjacobs.app.leon.core.common.regex.RegexFactory import com.svenjacobs.app.leon.core.domain.R import com.svenjacobs.app.leon.core.domain.sanitizer.Sanitizer import com.svenjacobs.app.leon.core.domain.sanitizer.SanitizerId @@ -36,16 +35,15 @@ class AmazonProductSanitizer : Sanitizer { override fun invoke(input: String): String { val result = REGEX.find(input) - // First group contains everything between top level domain and /dp/ argument - val group = result?.groups?.get(1) ?: return input + // First group contains domain and protocol like https://www.amazon.com + val domainGroup = result?.groups?.get(1) ?: return input + // Second group contains product id + val productIdGroup = result.groups[2] ?: return input - return RegexFactory.AllParameters.replace( - input = input.removeRange(group.range), - replacement = "", - ) + return "${domainGroup.value}/dp/${productIdGroup.value}/" } private companion object { - private val REGEX = Regex("amazon\\..+?(/.*)?/dp/[^/]+") + private val REGEX = Regex("((?:https?://)?(?:www\\.)?amazon\\.[^/]*).*/dp?/([^/]*)") } } diff --git a/core-domain/src/test/kotlin/com/svenjacobs/app/leon/core/domain/sanitizer/amazon/AmazonProductSanitizerTest.kt b/core-domain/src/test/kotlin/com/svenjacobs/app/leon/core/domain/sanitizer/amazon/AmazonProductSanitizerTest.kt index a1c4fdf2..5282e7b7 100644 --- a/core-domain/src/test/kotlin/com/svenjacobs/app/leon/core/domain/sanitizer/amazon/AmazonProductSanitizerTest.kt +++ b/core-domain/src/test/kotlin/com/svenjacobs/app/leon/core/domain/sanitizer/amazon/AmazonProductSanitizerTest.kt @@ -27,7 +27,7 @@ class AmazonProductSanitizerTest : WordSpec( "invoke" should { - "remove everything except /dp/* path argument" { + "clean Amazon product link" { var result = sanitizer( "https://www.amazon.de/Xiaomi-Aktivit%C3%A4tstracker-Trainings-Puls%C3%" + "BCberwachung-Akkulaufzeit/dp/B091G3FLL7/?_encoding=UTF8&pd_rd_w=xDcJP&pf" + @@ -49,6 +49,13 @@ class AmazonProductSanitizerTest : WordSpec( result shouldBe "https://www.amazon.co.uk/dp/B091G3FLL7/" } + "clean Amazon cart product link" { + sanitizer( + "https://www.amazon.com/gp/aw/d/B009EEZYE0/ref=ox_sc_act_image_1?smid=A" + + "TVPDKIKX0DER&psc=1", + ) shouldBe "https://www.amazon.com/dp/B009EEZYE0/" + } + "keep already cleaned Amazon URL" { sanitizer("https://www.amazon.com/dp/B091G3FLL7/") shouldBe "https://www.amazon.com/dp/B091G3FLL7/" @@ -57,7 +64,7 @@ class AmazonProductSanitizerTest : WordSpec( "matchesDomain" should { - "match for Amazon product domain" { + "match for Amazon product link" { sanitizer.matchesDomain( "https://www.amazon.de/Xiaomi-Aktivit%C3%A4tstracke" + "r-Trainings-Puls%C3%BCberwachung-Akkulaufzeit/dp/B091G3FLL7/", @@ -68,6 +75,13 @@ class AmazonProductSanitizerTest : WordSpec( "r-Trainings-Puls%C3%BCberwachung-Akkulaufzeit/dp/B091G3FLL7/", ) shouldBe true } + + "match for Amazon cart product link" { + sanitizer.matchesDomain( + "www.amazon.com/gp/aw/d/B009EEZYE0/ref=ox_sc_act_image_1?smid=ATVPDKIKX" + + "0DER&psc=1", + ) shouldBe true + } } }, )