diff --git a/src/Endpoint/Webhooks/RegisterNewWebhookRequest/RegisterNewWebhookRequest/Data/Item.php b/src/Endpoint/Webhooks/RegisterNewWebhookRequest/RegisterNewWebhookRequest/Data/Item.php index 9d92a202..62cb352e 100644 --- a/src/Endpoint/Webhooks/RegisterNewWebhookRequest/RegisterNewWebhookRequest/Data/Item.php +++ b/src/Endpoint/Webhooks/RegisterNewWebhookRequest/RegisterNewWebhookRequest/Data/Item.php @@ -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 @@ -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; } diff --git a/src/Webhook/Event.php b/src/Webhook/Event.php index 5cb63132..9624dcf7 100644 --- a/src/Webhook/Event.php +++ b/src/Webhook/Event.php @@ -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'; @@ -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'; @@ -35,15 +46,40 @@ 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'; @@ -51,11 +87,30 @@ enum Event: string 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'; diff --git a/tests/Unit/Endpoint/Webhooks/RegisterNewWebhookRequestItemTest.php b/tests/Unit/Endpoint/Webhooks/RegisterNewWebhookRequestItemTest.php new file mode 100644 index 00000000..aca39d4c --- /dev/null +++ b/tests/Unit/Endpoint/Webhooks/RegisterNewWebhookRequestItemTest.php @@ -0,0 +1,53 @@ +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']); + } +}