Skip to content

Commit 7507595

Browse files
mglamanmglaman
authored andcommitted
Issue #2905147 by mglaman: Use order item label for purchased entity label
1 parent 5ebd762 commit 7507595

2 files changed

Lines changed: 64 additions & 4 deletions

File tree

modules/log/src/EventSubscriber/CartEventSubscriber.php

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,8 @@ public static function getSubscribedEvents() {
4646
*/
4747
public function onCartEntityAdd(CartEntityAddEvent $event) {
4848
$cart = $event->getCart();
49-
$purchased_entity = $event->getOrderItem()->getPurchasedEntity();
5049
$this->logStorage->generate($cart, 'cart_entity_added', [
51-
'purchased_entity_label' => $purchased_entity ? $purchased_entity->label() : NULL,
50+
'purchased_entity_label' => $event->getOrderItem()->label(),
5251
])->save();
5352
}
5453

@@ -60,9 +59,8 @@ public function onCartEntityAdd(CartEntityAddEvent $event) {
6059
*/
6160
public function onCartOrderItemRemove(CartOrderItemRemoveEvent $event) {
6261
$cart = $event->getCart();
63-
$purchased_entity = $event->getOrderItem()->getPurchasedEntity();
6462
$this->logStorage->generate($cart, 'cart_item_removed', [
65-
'purchased_entity_label' => $purchased_entity ? $purchased_entity->label() : NULL,
63+
'purchased_entity_label' => $event->getOrderItem()->label(),
6664
])->save();
6765
}
6866

modules/log/tests/src/Kernel/CartIntegrationTest.php

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
namespace Drupal\Tests\commerce_log\Kernel;
44

5+
use Drupal\commerce_order\Entity\OrderItem;
6+
use Drupal\commerce_order\Entity\OrderItemType;
57
use Drupal\commerce_price\Price;
68
use Drupal\commerce_product\Entity\ProductVariation;
79
use Drupal\commerce_product\Entity\ProductVariationType;
@@ -100,6 +102,13 @@ protected function setUp() {
100102
'status' => 1,
101103
'price' => new Price('12.00', 'USD'),
102104
]);
105+
106+
// An order item type that doesn't need a purchasable entity.
107+
OrderItemType::create([
108+
'id' => 'test',
109+
'label' => 'Test',
110+
'orderType' => 'default',
111+
])->save();
103112
}
104113

105114
/**
@@ -118,6 +127,31 @@ public function testAddedToCart() {
118127
$this->assertText("{$this->variation->label()} added to the cart.");
119128
}
120129

130+
/**
131+
* Tests that a log is not generated when a non-purchasable entity added.
132+
*
133+
* The cart manager does not fire the `CartEvents::CART_ENTITY_ADD` event
134+
* unless there is a purchasable entity.
135+
*/
136+
public function testAddedToCartNoPurchasableEntity() {
137+
$this->enableCommerceCart();
138+
$cart = $this->cartProvider->createCart('default', $this->store, $this->user);
139+
$order_item = OrderItem::create([
140+
'title' => 'Membership subscription',
141+
'type' => 'test',
142+
'quantity' => 1,
143+
'unit_price' => [
144+
'number' => '10.00',
145+
'currency_code' => 'USD',
146+
],
147+
]);
148+
$order_item->save();
149+
$this->cartManager->addOrderItem($cart, $order_item);
150+
151+
$logs = $this->logStorage->loadByEntity($cart);
152+
$this->assertEquals(0, count($logs));
153+
}
154+
121155
/**
122156
* Tests that a log is generated when an order is placed.
123157
*/
@@ -136,6 +170,34 @@ public function testRemovedFromCart() {
136170
$this->assertText("{$this->variation->label()} removed from the cart.");
137171
}
138172

173+
/**
174+
* Tests that a log generated when a non-purchasable entity removed.
175+
*/
176+
public function testRemovedFromCartNoPurchasableEntity() {
177+
$this->enableCommerceCart();
178+
$cart = $this->cartProvider->createCart('default', $this->store, $this->user);
179+
$order_item = OrderItem::create([
180+
'title' => 'Membership subscription',
181+
'type' => 'test',
182+
'quantity' => 1,
183+
'unit_price' => [
184+
'number' => '10.00',
185+
'currency_code' => 'USD',
186+
],
187+
]);
188+
$order_item->save();
189+
$order_item = $this->cartManager->addOrderItem($cart, $order_item);
190+
$this->cartManager->removeOrderItem($cart, $order_item);
191+
192+
$logs = $this->logStorage->loadByEntity($cart);
193+
$this->assertEquals(1, count($logs));
194+
$log = end($logs);
195+
$build = $this->logViewBuilder->view($log);
196+
$this->render($build);
197+
198+
$this->assertText("{$order_item->label()} removed from the cart.");
199+
}
200+
139201
/**
140202
* Enables commerce_cart for tests.
141203
*

0 commit comments

Comments
 (0)