diff --git a/CHANGELOG.md b/CHANGELOG.md index f7d529f..4f02dce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 3.1.2 October 15 2024 + +- Prevent entering recovery mode for single-use multipass URLs. + ## 3.1.1 October 2, 2024 - Ensure that cached WebView instances don't have existing parents before trying to add them to their container. diff --git a/README.md b/README.md index e050b51..a2e4f2e 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ your project: #### Gradle ```groovy -implementation "com.shopify:checkout-sheet-kit:3.1.1" +implementation "com.shopify:checkout-sheet-kit:3.1.2" ``` #### Maven @@ -33,7 +33,7 @@ implementation "com.shopify:checkout-sheet-kit:3.1.1" com.shopify checkout-sheet-kit - 3.1.1 + 3.1.2 ``` diff --git a/lib/build.gradle b/lib/build.gradle index 753473c..2d6dd89 100644 --- a/lib/build.gradle +++ b/lib/build.gradle @@ -14,7 +14,7 @@ def resolveEnvVarValue(name, defaultValue) { return rawValue ? rawValue : defaultValue } -def versionName = resolveEnvVarValue("CHECKOUT_SHEET_KIT_VERSION", "3.1.1") +def versionName = resolveEnvVarValue("CHECKOUT_SHEET_KIT_VERSION", "3.1.2") ext { app_compat_version = '1.6.1' diff --git a/lib/src/main/java/com/shopify/checkoutsheetkit/CheckoutDialog.kt b/lib/src/main/java/com/shopify/checkoutsheetkit/CheckoutDialog.kt index 34c6411..7483c62 100644 --- a/lib/src/main/java/com/shopify/checkoutsheetkit/CheckoutDialog.kt +++ b/lib/src/main/java/com/shopify/checkoutsheetkit/CheckoutDialog.kt @@ -151,7 +151,9 @@ internal class CheckoutDialog( internal fun closeCheckoutDialogWithError(exception: CheckoutException) { checkoutEventProcessor.onCheckoutFailed(exception) - if (ShopifyCheckoutSheetKit.configuration.errorRecovery.shouldRecoverFromError(exception)) { + + val isOneTimeUseURL = this.checkoutUrl.contains("multipass") + if (!isOneTimeUseURL && ShopifyCheckoutSheetKit.configuration.errorRecovery.shouldRecoverFromError(exception)) { attemptToRecoverFromError(exception) } else { dismiss() diff --git a/lib/src/test/java/com/shopify/checkoutsheetkit/CheckoutDialogTest.kt b/lib/src/test/java/com/shopify/checkoutsheetkit/CheckoutDialogTest.kt index f672816..33f6e76 100644 --- a/lib/src/test/java/com/shopify/checkoutsheetkit/CheckoutDialogTest.kt +++ b/lib/src/test/java/com/shopify/checkoutsheetkit/CheckoutDialogTest.kt @@ -189,6 +189,24 @@ class CheckoutDialogTest { verify(mockEventProcessor).onCheckoutFailed(any()) } + @Test + fun `does not call attemptToRecoverFromError if closeCheckoutDialogWithError is called when url contains multipass`() { + val mockEventProcessor = mock() + ShopifyCheckoutSheetKit.present("https://shopify.com/a/b/c/multipass", activity, mockEventProcessor) + + val checkoutDialog = ShadowDialog.getLatestDialog() as CheckoutDialog + assertThat(checkoutDialog.containsChildOfType(CheckoutWebView::class.java)).isTrue() + + checkoutDialog.closeCheckoutDialogWithError(checkoutException(isRecoverable = true)) + shadowOf(Looper.getMainLooper()).runToEndOfTasks() + + // attemptToRecoverFromError creates a FallbackWebView and removes the CheckoutWebView + assertThat(checkoutDialog.containsChildOfType(FallbackWebView::class.java)).isFalse() + assertThat(checkoutDialog.containsChildOfType(CheckoutWebView::class.java)).isFalse() + verify(mockEventProcessor, never()).onCheckoutCanceled() + verify(mockEventProcessor).onCheckoutFailed(any()) + } + @Test fun `can disable fallback behaviour via shouldRecoverFromError`() { val mockEventProcessor = mock()