Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
namespace Shoptet\Api\Sdk\Php\Endpoint\Webhooks\RegisterNewWebhookRequest\RegisterNewWebhookRequest\Data;

use Shoptet\Api\Sdk\Php\Component\Entity\Entity;
use Shoptet\Api\Sdk\Php\Exception\InvalidArgumentException;
use Shoptet\Api\Sdk\Php\Webhook\Event;

class Item extends Entity
Expand All @@ -18,14 +17,7 @@ public function getEvent(): string

public function setEvent(Event|string $event): static
{
if (is_string($event)) {
if (Event::tryFrom($event) === null) {
throw new InvalidArgumentException(sprintf('"%s" is not valid webhook event type value', $event));
}
} else {
$event = $event->value;
}
$this->event = $event;
$this->event = $event instanceof Event ? $event->value : $event;
return $this;
}

Expand Down
55 changes: 55 additions & 0 deletions src/Webhook/Event.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,15 @@

enum Event: string
{
case AVAILABILITY_CREATE = 'availability:create';
case AVAILABILITY_UPDATE = 'availability:update';
case AVAILABILITY_DELETE = 'availability:delete';
case BRAND_CREATE = 'brand:create';
case BRAND_UPDATE = 'brand:update';
case BRAND_DELETE = 'brand:delete';
case CATEGORY_CREATE = 'category:create';
case CATEGORY_UPDATE = 'category:update';
case CATEGORY_DELETE = 'category:delete';
case CREDIT_NOTE_CREATE = 'creditNote:create';
case CREDIT_NOTE_DELETE = 'creditNote:delete';
case CREDIT_NOTE_UPDATE = 'creditNote:update';
Expand All @@ -16,13 +22,18 @@ enum Event: string
case CUSTOMER_ENABLE_ORDERS = 'customer:enableOrders';
case CUSTOMER_IMPORT = 'customer:import';
case CUSTOMER_DELETE = 'customer:delete';
case CUSTOMER_GROUP_CREATE = 'customerGroup:create';
case CUSTOMER_GROUP_UPDATE = 'customerGroup:update';
case CUSTOMER_GROUP_DELETE = 'customerGroup:delete';
case DELIVERY_NOTE_CREATE = 'deliveryNote:create';
case DELIVERY_NOTE_DELETE = 'deliveryNote:delete';
case DELIVERY_NOTE_UPDATE = 'deliveryNote:update';
case DISCOUNT_COUPON_CREATE = 'discountCoupon:create';
case DISCOUNT_COUPON_UPDATE = 'discountCoupon:update';
case DISCOUNT_COUPON_DELETE = 'discountCoupon:delete';
case ESHOP_CURRENCIES = 'eshop:currencies';
case ESHOP_BILLING_INFORMATION = 'eshop:billingInformation';
case ESHOP_SETTINGS_INFORMATION = 'eshop:settingsInformation';
case ESHOP_DESIGN = 'eshop:design';
case ESHOP_MANDATORY_FIELDS = 'eshop:mandatoryFields';
case ESHOP_PROJECT_DOMAIN = 'eshop:projectDomain';
Expand All @@ -35,27 +46,71 @@ enum Event: string
case ORDER_CANCEL = 'order:cancel';
case ORDER_CREATE = 'order:create';
case ORDER_DELETE = 'order:delete';
case ORDER_PAID = 'order:paid';
case ORDER_UPDATE = 'order:update';
case ORDER_HISTORY_REMARKS_CHANGE = 'orderHistoryRemarks:change';
case ORDER_STATUSES_LIST_CHANGE = 'orderStatusesList:change';
case PAYMENT_METHOD_CHANGE = 'paymentMethod:change';
case PRICELIST_CREATE = 'pricelist:create';
case PRICELIST_DELETE = 'pricelist:delete';
case PRODUCT_CREATE = 'product:create';
case PRODUCT_UPDATE = 'product:update';
case PRODUCT_DELETE = 'product:delete';
case PRODUCT_REVIEW_CREATED = 'productReview:created';
case PRODUCT_VARIANT_CREATE = 'productVariant:create';
case PRODUCT_VARIANT_UPDATE = 'productVariant:update';
case PRODUCT_VARIANT_DELETE = 'productVariant:delete';
case PRODUCT_VARIANT_PRICE_UPDATE = 'productVariantPrice:update';
case PROFORMA_INVOICE_CREATE = 'proformaInvoice:create';
case PROFORMA_INVOICE_DELETE = 'proformaInvoice:delete';
case PROFORMA_INVOICE_UPDATE = 'proformaInvoice:update';
case PROJECT_REVIEW_CREATE = 'projectReview:create';
case PROOF_PAYMENT_CREATE = 'proofPayment:create';
case PROOF_PAYMENT_DELETE = 'proofPayment:delete';
case PROOF_PAYMENT_UPDATE = 'proofPayment:update';
case QUANTITY_DISCOUNT_CREATE = 'quantityDiscount:create';
case QUANTITY_DISCOUNT_UPDATE = 'quantityDiscount:update';
case QUANTITY_DISCOUNT_DELETE = 'quantityDiscount:delete';
case SALES_CHANNEL_CREATE = 'salesChannel:create';
case SALES_CHANNEL_UPDATE = 'salesChannel:update';
case SALES_CHANNEL_DELETE = 'salesChannel:delete';
case SECTION_ARTICLE_CREATE = 'sectionArticle:create';
case SECTION_ARTICLE_UPDATE = 'sectionArticle:update';
case SECTION_ARTICLE_DELETE = 'sectionArticle:delete';
case SHIPMENT_CREATE = 'shipment:create';
case SHIPMENT_UPDATE = 'shipment:update';
case SHIPMENT_FAIL = 'shipment:fail';
case SHIPPING_METHOD_CHANGE = 'shippingMethod:change';
case SHIPPING_REQUEST_CANCELLED = 'shippingRequest:cancelled';
case SHIPPING_REQUEST_CONFIRMED = 'shippingRequest:confirmed';
case STOCK_MOVEMENT = 'stock:movement';
case STOCK_IN_STOCK = 'stock:inStock';
case STOCK_SOLD_OUT = 'stock:soldOut';
case STOCK_MIN_STOCK_SUPPLY_REACHED = 'stock:minStockSupplyReached';
case SUPPLIER_CREATE = 'supplier:create';
case SUPPLIER_UPDATE = 'supplier:update';
case SUPPLIER_DELETE = 'supplier:delete';
case WARRANTY_CREATE = 'warranty:create';
case WARRANTY_UPDATE = 'warranty:update';
case WARRANTY_DELETE = 'warranty:delete';
case CATEGORY_MASS_CREATE = 'category:massCreate';
case CATEGORY_MASS_UPDATE = 'category:massUpdate';
case CATEGORY_MASS_DELETE = 'category:massDelete';
case DISCOUNT_COUPON_MASS_CREATE = 'discountCoupon:massCreate';
case DISCOUNT_COUPON_MASS_DELETE = 'discountCoupon:massDelete';
case INVOICE_MASS_UPDATE = 'invoice:massUpdate';
case ORDER_MASS_CREATE = 'order:massCreate';
case ORDER_MASS_PAID = 'order:massPaid';
case ORDER_MASS_UPDATE = 'order:massUpdate';
case PRODUCT_MASS_CREATE = 'product:massCreate';
case PRODUCT_MASS_UPDATE = 'product:massUpdate';
case PRODUCT_MASS_DELETE = 'product:massDelete';
case PRODUCT_VARIANT_MASS_CREATE = 'productVariant:massCreate';
case PRODUCT_VARIANT_MASS_UPDATE = 'productVariant:massUpdate';
case PRODUCT_VARIANT_MASS_DELETE = 'productVariant:massDelete';
case PRODUCT_VARIANT_PRICE_MASS_UPDATE = 'productVariantPrice:massUpdate';
case QUANTITY_DISCOUNT_MASS_UPDATE = 'quantityDiscount:massUpdate';
case QUANTITY_DISCOUNT_MASS_DELETE = 'quantityDiscount:massDelete';
case ADDON_SUSPEND = 'addon:suspend';
case ADDON_APPROVE = 'addon:approve';
case ADDON_TERMINATE = 'addon:terminate';
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
<?php

namespace ShoptetTests\Unit\Endpoint\Webhooks;

use PHPUnit\Framework\TestCase;
use Shoptet\Api\Sdk\Php\Endpoint\Webhooks\RegisterNewWebhookRequest\RegisterNewWebhookRequest\Data\Item;
use Shoptet\Api\Sdk\Php\Webhook\Event;

class RegisterNewWebhookRequestItemTest extends TestCase
{
private const string WEBHOOK_URL = 'https://example.com/webhook';

public function testAcceptsEnumCase(): void
{
$item = (new Item())
->setEvent(Event::JOB_FINISHED)
->setUrl(self::WEBHOOK_URL);

$this->assertSame('job:finished', $item->getEvent());
}

public function testAcceptsKnownEventString(): void
{
$item = (new Item())
->setEvent('order:create')
->setUrl(self::WEBHOOK_URL);

$this->assertSame('order:create', $item->getEvent());
}

public function testAcceptsEventStringUnknownToEnum(): void
{
$futureEvent = 'someEntity:futureEvent';

$item = (new Item())
->setEvent($futureEvent)
->setUrl(self::WEBHOOK_URL);

$this->assertSame($futureEvent, $item->getEvent());
}

public function testSerializesEventAndUrl(): void
{
$item = (new Item())
->setEvent(Event::ESHOP_SETTINGS_INFORMATION)
->setUrl(self::WEBHOOK_URL);

$serialized = $item->toArray();

$this->assertSame('eshop:settingsInformation', $serialized['event']);
$this->assertSame(self::WEBHOOK_URL, $serialized['url']);
}
}