From 69cb3dfacb36c58d2a57635a4939a71d05a467eb Mon Sep 17 00:00:00 2001
From: Brad Jones <brad@bradjonesllc.com>
Date: Sun, 16 Feb 2025 22:22:52 -0700
Subject: [PATCH 1/2] Back off prior work-around

---
 src/RecurringOrderManager.php                | 4 ----
 tests/src/Kernel/RecurringKernelTestBase.php | 2 ++
 2 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/src/RecurringOrderManager.php b/src/RecurringOrderManager.php
index 826a416..4a55c9b 100644
--- a/src/RecurringOrderManager.php
+++ b/src/RecurringOrderManager.php
@@ -349,10 +349,6 @@ class RecurringOrderManager implements RecurringOrderManagerInterface {
         $prorated_unit_price = $prorater->prorateOrderItem($order_item, $charge->getBillingPeriod(), $charge->getFullBillingPeriod());
         $order_item->setUnitPrice($prorated_unit_price, TRUE);
       }
-      // Avoid setting unsaved order items for now, to avoid #3017259.
-      if ($order_item->isNew()) {
-        $order_item->save();
-      }
       $order->addItem($order_item);
     }
 
diff --git a/tests/src/Kernel/RecurringKernelTestBase.php b/tests/src/Kernel/RecurringKernelTestBase.php
index ebfc1fa..ee9b3d4 100644
--- a/tests/src/Kernel/RecurringKernelTestBase.php
+++ b/tests/src/Kernel/RecurringKernelTestBase.php
@@ -175,8 +175,10 @@ abstract class RecurringKernelTestBase extends OrderKernelTestBase {
     $first_order_item->save();
     $second_order_item = OrderItem::create([
       'type' => 'default',
+      'title' => $this->variation->getOrderItemTitle(),
       'purchased_entity' => $this->variation,
       'unit_price' => [
+        // This unit price may not be the same as the variation's.
         'number' => '2.00',
         'currency_code' => 'USD',
       ],
-- 
GitLab


From 58a2bdf81e470209eda7f5746ddf86227e8cf8ab Mon Sep 17 00:00:00 2001
From: Brad Jones <brad@bradjonesllc.com>
Date: Sun, 16 Feb 2025 22:29:35 -0700
Subject: [PATCH 2/2] Fix test

---
 tests/src/Kernel/RecurringKernelTestBase.php | 22 ++++++++++----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/tests/src/Kernel/RecurringKernelTestBase.php b/tests/src/Kernel/RecurringKernelTestBase.php
index ee9b3d4..7ed6d27 100644
--- a/tests/src/Kernel/RecurringKernelTestBase.php
+++ b/tests/src/Kernel/RecurringKernelTestBase.php
@@ -4,6 +4,7 @@ namespace Drupal\Tests\commerce_recurring\Kernel;
 
 use Drupal\commerce_order\Entity\Order;
 use Drupal\commerce_order\Entity\OrderItem;
+use Drupal\commerce_order\OrderItemStorage;
 use Drupal\commerce_payment\Entity\PaymentGateway;
 use Drupal\commerce_payment\Entity\PaymentMethod;
 use Drupal\commerce_product\Entity\ProductVariation;
@@ -173,17 +174,16 @@ abstract class RecurringKernelTestBase extends OrderKernelTestBase {
       'quantity' => 1,
     ]);
     $first_order_item->save();
-    $second_order_item = OrderItem::create([
-      'type' => 'default',
-      'title' => $this->variation->getOrderItemTitle(),
-      'purchased_entity' => $this->variation,
-      'unit_price' => [
-        // This unit price may not be the same as the variation's.
-        'number' => '2.00',
-        'currency_code' => 'USD',
-      ],
-      'quantity' => '3',
-    ]);
+    $order_item_storage = $this->entityTypeManager
+      ->getStorage('commerce_order_item');
+    assert($order_item_storage instanceof OrderItemStorage);
+    $second_order_item = $order_item_storage->createFromPurchasableEntity(
+      $this->variation,
+      [
+        'type' => 'default',
+        'quantity' => '3',
+      ]
+    );
     $second_order_item->save();
     $initial_order = Order::create([
       'type' => 'default',
-- 
GitLab