diff --git a/packages/core/src/Observers/OrderLineObserver.php b/packages/core/src/Observers/OrderLineObserver.php index 91d3fbe700..7486adc21b 100644 --- a/packages/core/src/Observers/OrderLineObserver.php +++ b/packages/core/src/Observers/OrderLineObserver.php @@ -15,7 +15,7 @@ class OrderLineObserver */ public function creating(OrderLine $orderLine) { - if ($orderLine->type != 'shipping' && ! $orderLine->purchasable instanceof Purchasable) { + if (! in_array(Purchasable::class, class_implements($orderLine->purchasable_type, true))) { throw new NonPurchasableItemException($orderLine->purchasable_type); } } @@ -27,7 +27,7 @@ public function creating(OrderLine $orderLine) */ public function updating(OrderLine $orderLine) { - if ($orderLine->type != 'shipping' && ! $orderLine->purchasable instanceof Purchasable) { + if (! in_array(Purchasable::class, class_implements($orderLine->purchasable_type, true))) { throw new NonPurchasableItemException($orderLine->purchasable_type); } } diff --git a/packages/core/tests/Stubs/DataTypes/TestPurchasable.php b/packages/core/tests/Stubs/DataTypes/TestPurchasable.php new file mode 100644 index 0000000000..d572b65337 --- /dev/null +++ b/packages/core/tests/Stubs/DataTypes/TestPurchasable.php @@ -0,0 +1,139 @@ +price; + } + + /** + * Get prices for the purchasable item. + */ + public function getPrices(): Collection + { + return collect([ + $this->price, + ]); + } + + /** + * Return the purchasable unit quantity. + */ + public function getUnitQuantity(): int + { + return 1; + } + + /** + * Return the purchasable tax class. + */ + public function getTaxClass(): TaxClass + { + return $this->taxClass; + } + + /** + * Return the purchasable tax reference. + * + * @return string|null + */ + public function getTaxReference() + { + return $this->taxReference; + } + + /** + * Return what type of purchasable this is, i.e. physical,digital,shipping. + * + * @return string + */ + public function getType() + { + return 'test-purchsable'; + } + + /** + * Return the name for the purchasable. + * + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * Return the description for the purchasable. + * + * @return string + */ + public function getDescription() + { + return $this->description; + } + + /** + * Return the option for this purchasable. + * + * @return string|null + */ + public function getOption() + { + return $this->option; + } + + /** + * Return a unique string which identifies the purchasable item. + * + * @return string + */ + public function getIdentifier() + { + return $this->identifier; + } + + /** + * Returns whether the purchasable item is shippable. + * + * @return bool + */ + public function isShippable() + { + return false; + } + + /** + * {@inheritDoc} + */ + public function getThumbnail() + { + return null; + } +}