From 36b090aee222318edadea0fce5a97e8760862131 Mon Sep 17 00:00:00 2001 From: Clyde Santiago Date: Fri, 21 Mar 2025 18:56:53 +0800 Subject: [PATCH] fix: Downgrading from an annual plan to a monthly plan results in the deferred cancellation of the merchant's current app subscription --- src/Actions/GetPlanUrl.php | 16 +++------------- src/Contracts/ApiHelper.php | 10 ---------- src/Services/ApiHelper.php | 22 +++------------------- tests/Services/ApiHelperTest.php | 25 ------------------------- 4 files changed, 6 insertions(+), 67 deletions(-) diff --git a/src/Actions/GetPlanUrl.php b/src/Actions/GetPlanUrl.php index 4dbba43f..a01a18de 100644 --- a/src/Actions/GetPlanUrl.php +++ b/src/Actions/GetPlanUrl.php @@ -70,20 +70,10 @@ public function __invoke(ShopId $shopId, NullablePlanId $planId, string $host): $plan = $planId->isNull() ? $this->planQuery->getDefault() : $this->planQuery->getById($planId); // Confirmation URL - if ($plan->getInterval()->toNative() === ChargeInterval::ANNUAL()->toNative()) { - $api = $shop->apiHelper() - ->createChargeGraphQL($this->chargeHelper->details($plan, $shop, $host)); + $api = $shop->apiHelper() + ->createChargeGraphQL($this->chargeHelper->details($plan, $shop, $host)); - $confirmationUrl = $api['confirmationUrl']; - } else { - $api = $shop->apiHelper() - ->createCharge( - ChargeType::fromNative($plan->getType()->toNative()), - $this->chargeHelper->details($plan, $shop, $host) - ); - - $confirmationUrl = $api['confirmation_url']; - } + $confirmationUrl = $api['confirmationUrl']; return $confirmationUrl; } diff --git a/src/Contracts/ApiHelper.php b/src/Contracts/ApiHelper.php index a50f20e3..3fb5b9a4 100644 --- a/src/Contracts/ApiHelper.php +++ b/src/Contracts/ApiHelper.php @@ -125,16 +125,6 @@ public function getCharge(ChargeType $chargeType, ChargeReference $chargeRef): R */ public function activateCharge(ChargeType $chargeType, ChargeReference $chargeRef): ResponseAccess; - /** - * Create a charge. - * - * @param ChargeType $chargeType The type of charge (plural). - * @param PlanDetails $payload The data for the charge creation. - * - * @return ResponseAccess - */ - public function createCharge(ChargeType $chargeType, PlanDetails $payload): ResponseAccess; - /** * Create a charge using GraphQL. * diff --git a/src/Services/ApiHelper.php b/src/Services/ApiHelper.php index 16a2db68..1be2d8f4 100644 --- a/src/Services/ApiHelper.php +++ b/src/Services/ApiHelper.php @@ -248,25 +248,6 @@ public function activateCharge(ChargeType $chargeType, ChargeReference $chargeRe return $response['body'][$typeString]; } - /** - * {@inheritdoc} - * TODO: Convert to GraphQL (merge createChargeGraphQL). - */ - public function createCharge(ChargeType $chargeType, PlanDetailsTransfer $payload): ResponseAccess - { - // API path - $typeString = $this->chargeApiPath($chargeType); - - // Fire the request - $response = $this->doRequest( - ApiMethod::POST(), - "/admin/{$typeString}s.json", - [$typeString => $payload->toArray()] - ); - - return $response['body'][$typeString]; - } - /** * {@inheritdoc} * @@ -278,6 +259,7 @@ public function createChargeGraphQL(PlanDetailsTransfer $payload): ResponseAcces mutation appSubscriptionCreate( $name: String!, $returnUrl: URL!, + $replacementBehavior: AppSubscriptionReplacementBehavior, $trialDays: Int, $test: Boolean, $lineItems: [AppSubscriptionLineItemInput!]! @@ -285,6 +267,7 @@ public function createChargeGraphQL(PlanDetailsTransfer $payload): ResponseAcces appSubscriptionCreate( name: $name, returnUrl: $returnUrl, + replacementBehavior: $replacementBehavior, trialDays: $trialDays, test: $test, lineItems: $lineItems @@ -303,6 +286,7 @@ public function createChargeGraphQL(PlanDetailsTransfer $payload): ResponseAcces $variables = [ 'name' => $payload->name, 'returnUrl' => $payload->returnUrl, + 'replacementBehavior' => 'APPLY_IMMEDIATELY', 'trialDays' => $payload->trialDays, 'test' => $payload->test, 'lineItems' => [ diff --git a/tests/Services/ApiHelperTest.php b/tests/Services/ApiHelperTest.php index 7ba213b8..a70f7407 100644 --- a/tests/Services/ApiHelperTest.php +++ b/tests/Services/ApiHelperTest.php @@ -150,31 +150,6 @@ public function testActivateCharge(): void $this->assertSame('Super Mega Plan', $data['name']); } - public function testCreateCharge(): void - { - // Create a shop - $shop = factory($this->model)->create(); - - // Response stubbing - $this->setApiStub(); - ApiStub::stubResponses(['post_recurring_application_charges']); - - // Build the details object - $transfer = new PlanDetailsTransfer(); - $transfer->name = 'Test'; - $transfer->price = 12.00; - $transfer->interval = PlanInterval::EVERY_30_DAYS()->toNative(); - $transfer->test = true; - $transfer->trialDays = 7; - - $data = $shop->apiHelper()->createCharge( - ChargeType::RECURRING(), - $transfer - ); - $this->assertInstanceOf(ResponseAccess::class, $data); - $this->assertSame('Basic Plan', $data['name']); - } - public function testGetWebhooks(): void { // Create a shop