Skip to content

Commit

Permalink
Update tests
Browse files Browse the repository at this point in the history
  • Loading branch information
toluo-stripe committed Jan 30, 2025
1 parent e6e9572 commit db6e329
Show file tree
Hide file tree
Showing 5 changed files with 126 additions and 61 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,11 @@ internal object TestFactory {
originalParams = mock()
)

val LINK_SAVED_PAYMENT_DETAILS = LinkPaymentDetails.Saved(
paymentDetails = CONSUMER_PAYMENT_DETAILS_CARD,
paymentMethodCreateParams = PAYMENT_METHOD_CREATE_PARAMS,
)

val LINK_ACCOUNT = LinkAccount(CONSUMER_SESSION)

val CONSUMER_PAYMENT_DETAILS: ConsumerPaymentDetails = ConsumerPaymentDetails(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -510,7 +510,7 @@ class DefaultLinkAccountManagerTest {
}

@Test
fun `createCardPaymentDetails should call shareCardPaymentDetails when enabled`() = runSuspendTest {
fun `createCardPaymentDetails makes correct calls in passthrough mode`() = runSuspendTest {
val linkRepository = object : FakeLinkRepository() {
var createCardPaymentDetailsCallCount = 0
var shareCardPaymentDetailsCallCount = 0
Expand Down Expand Up @@ -553,10 +553,7 @@ class DefaultLinkAccountManagerTest {
startSession = true,
)

val result = accountManager.createCardPaymentDetails(
paymentMethodCreateParams = TestFactory.PAYMENT_METHOD_CREATE_PARAMS,
shouldShareCardPaymentDetails = true
)
val result = accountManager.createCardPaymentDetails(TestFactory.PAYMENT_METHOD_CREATE_PARAMS)

assertThat(result.isSuccess).isTrue()
val linkPaymentDetails = result.getOrThrow()
Expand All @@ -568,60 +565,6 @@ class DefaultLinkAccountManagerTest {
assertThat(accountManager.linkAccount.value).isNotNull()
}

@Test
fun `createCardPaymentDetails should not call shareCardPaymentDetails when disabled`() = runSuspendTest {
val linkRepository = object : FakeLinkRepository() {
var createCardPaymentDetailsCallCount = 0
var shareCardPaymentDetailsCallCount = 0
override suspend fun createCardPaymentDetails(
paymentMethodCreateParams: PaymentMethodCreateParams,
userEmail: String,
stripeIntent: StripeIntent,
consumerSessionClientSecret: String,
consumerPublishableKey: String?,
active: Boolean
): Result<LinkPaymentDetails.New> {
createCardPaymentDetailsCallCount += 1
return Result.success(TestFactory.LINK_NEW_PAYMENT_DETAILS)
}

override suspend fun shareCardPaymentDetails(
paymentMethodCreateParams: PaymentMethodCreateParams,
id: String,
last4: String,
consumerSessionClientSecret: String
): Result<LinkPaymentDetails.New> {
shareCardPaymentDetailsCallCount += 1
return super.shareCardPaymentDetails(
paymentMethodCreateParams,
id,
last4,
consumerSessionClientSecret
)
}
}
val accountManager = accountManager(passthroughModeEnabled = true, linkRepository = linkRepository)

accountManager.setLinkAccountFromLookupResult(
TestFactory.CONSUMER_SESSION_LOOKUP,
startSession = true,
)

val result = accountManager.createCardPaymentDetails(
paymentMethodCreateParams = TestFactory.PAYMENT_METHOD_CREATE_PARAMS,
shouldShareCardPaymentDetails = false
)

assertThat(result.isSuccess).isTrue()
val linkPaymentDetails = result.getOrThrow()
assertThat(linkPaymentDetails.paymentDetails.id)
.isEqualTo(TestFactory.LINK_NEW_PAYMENT_DETAILS.paymentDetails.id)

assertThat(linkRepository.createCardPaymentDetailsCallCount).isEqualTo(1)
assertThat(linkRepository.shareCardPaymentDetailsCallCount).isEqualTo(0)
assertThat(accountManager.linkAccount.value).isNotNull()
}

@Test
fun `lookupConsumer does not start session when startSession is false`() = runSuspendTest {
val linkRepository = object : FakeLinkRepository() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,8 +136,7 @@ internal open class FakeLinkAccountManager : LinkAccountManager {
}

override suspend fun createCardPaymentDetails(
paymentMethodCreateParams: PaymentMethodCreateParams,
shouldShareCardPaymentDetails: Boolean
paymentMethodCreateParams: PaymentMethodCreateParams
): Result<LinkPaymentDetails> {
return createCardPaymentDetailsResult
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@ import com.google.common.truth.Truth.assertThat
import com.stripe.android.core.Logger
import com.stripe.android.core.strings.resolvableString
import com.stripe.android.link.LinkConfiguration
import com.stripe.android.link.LinkPaymentDetails
import com.stripe.android.link.TestFactory
import com.stripe.android.link.model.LinkAccount
import com.stripe.android.model.ConsumerPaymentDetails
import com.stripe.android.model.PaymentMethodCreateParams
import com.stripe.android.model.PaymentMethodOptionsParams
import com.stripe.android.model.SetupIntentFixtures
import com.stripe.android.paymentelement.confirmation.ConfirmationHandler
import com.stripe.android.paymentelement.confirmation.FakeConfirmationHandler
Expand Down Expand Up @@ -169,6 +171,98 @@ internal class DefaultLinkConfirmationHandlerTest {
.containsExactly("DefaultLinkConfirmationHandler: Payment confirmation returned null" to null)
}

@Test
fun `confirm with New LinkPaymentDetails calls uses correct confirmation args`() = runTest(dispatcher) {
val configuration = TestFactory.LINK_CONFIGURATION
val confirmationHandler = FakeConfirmationHandler()
val handler = createHandler(
confirmationHandler = confirmationHandler,
configuration = configuration
)

confirmationHandler.awaitResultTurbine.add(
item = ConfirmationHandler.Result.Succeeded(
intent = configuration.stripeIntent,
deferredIntentConfirmationType = null
)
)

val result = handler.confirm(
paymentDetails = TestFactory.LINK_NEW_PAYMENT_DETAILS,
linkAccount = TestFactory.LINK_ACCOUNT,
cvc = CVC
)

assertThat(result).isEqualTo(Result.Succeeded)
confirmationHandler.startTurbine.awaitItem().assertConfirmationArgs(
configuration = configuration,
linkAccount = TestFactory.LINK_ACCOUNT,
paymentDetails = TestFactory.CONSUMER_PAYMENT_DETAILS_CARD,
cvc = CVC
)
}

@Test
fun `confirm with saved LinkPaymentDetails creates correct confirmation args`() = runTest(dispatcher) {
val configuration = TestFactory.LINK_CONFIGURATION
val confirmationHandler = FakeConfirmationHandler()
val handler = createHandler(
confirmationHandler = confirmationHandler,
configuration = configuration
)

confirmationHandler.awaitResultTurbine.add(
item = ConfirmationHandler.Result.Succeeded(
intent = configuration.stripeIntent,
deferredIntentConfirmationType = null
)
)

val savedPaymentDetails = TestFactory.LINK_SAVED_PAYMENT_DETAILS
val result = handler.confirm(
paymentDetails = savedPaymentDetails,
linkAccount = TestFactory.LINK_ACCOUNT,
cvc = CVC
)

assertThat(result).isEqualTo(Result.Succeeded)
confirmationHandler.startTurbine.awaitItem().assertSavedConfirmationArgs(
configuration = configuration,
paymentDetails = TestFactory.LINK_SAVED_PAYMENT_DETAILS,
cvc = CVC
)
}

@Test
fun `confirm with saved LinkPaymentDetails in passthrough mode omits CVC`() = runTest(dispatcher) {
val configuration = TestFactory.LINK_CONFIGURATION.copy(passthroughModeEnabled = true)
val confirmationHandler = FakeConfirmationHandler()
val handler = createHandler(
confirmationHandler = confirmationHandler,
configuration = configuration
)

confirmationHandler.awaitResultTurbine.add(
item = ConfirmationHandler.Result.Succeeded(
intent = configuration.stripeIntent,
deferredIntentConfirmationType = null
)
)

val result = handler.confirm(
paymentDetails = TestFactory.LINK_SAVED_PAYMENT_DETAILS,
linkAccount = TestFactory.LINK_ACCOUNT,
cvc = CVC
)

assertThat(result).isEqualTo(Result.Succeeded)
confirmationHandler.startTurbine.awaitItem().assertSavedConfirmationArgs(
configuration = configuration,
paymentDetails = TestFactory.LINK_SAVED_PAYMENT_DETAILS,
cvc = null
)
}

private fun ConfirmationHandler.Args.assertConfirmationArgs(
configuration: LinkConfiguration,
paymentDetails: ConsumerPaymentDetails.PaymentDetails,
Expand All @@ -188,6 +282,21 @@ internal class DefaultLinkConfirmationHandlerTest {
assertThat(initializationMode).isEqualTo(configuration.initializationMode)
}

private fun ConfirmationHandler.Args.assertSavedConfirmationArgs(
configuration: LinkConfiguration,
paymentDetails: LinkPaymentDetails.Saved,
cvc: String?,
) {
assertThat(intent).isEqualTo(configuration.stripeIntent)
val option = confirmationOption as PaymentMethodConfirmationOption.Saved
assertThat(option.paymentMethod.id).isEqualTo(paymentDetails.paymentDetails.id)

val optionsCard = option.optionsParams as? PaymentMethodOptionsParams.Card
assertThat(optionsCard?.cvc).isEqualTo(cvc)
assertThat(shippingDetails).isEqualTo(configuration.shippingDetails)
assertThat(initializationMode).isEqualTo(configuration.initializationMode)
}

private fun createHandler(
configuration: LinkConfiguration = TestFactory.LINK_CONFIGURATION,
logger: Logger = FakeLogger(),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.stripe.android.link.confirmation

import com.stripe.android.link.LinkPaymentDetails
import com.stripe.android.link.model.LinkAccount
import com.stripe.android.model.ConsumerPaymentDetails

Expand All @@ -22,6 +23,14 @@ internal class FakeLinkConfirmationHandler : LinkConfirmationHandler {
return confirmResult
}

override suspend fun confirm(
paymentDetails: LinkPaymentDetails,
linkAccount: LinkAccount,
cvc: String?
): Result {
TODO("Not yet implemented")
}

data class Call(
val paymentDetails: ConsumerPaymentDetails.PaymentDetails,
val linkAccount: LinkAccount,
Expand Down

0 comments on commit db6e329

Please sign in to comment.