From 1e5465651037733bc36b4cc326dc06579d8b19a2 Mon Sep 17 00:00:00 2001 From: Jens Schulze Date: Mon, 23 Jul 2018 16:52:51 +0200 Subject: [PATCH] feat(ProductDiscount): add setValidFromAndUntil update action --- .../Update/ProductDiscountsActionBuilder.php | 12 +++++ ...ductDiscountSetValidFromAndUntilAction.php | 48 +++++++++++++++++++ .../ProductDiscountUpdateRequestTest.php | 27 +++++++++++ 3 files changed, 87 insertions(+) create mode 100644 src/Core/Request/ProductDiscounts/Command/ProductDiscountSetValidFromAndUntilAction.php diff --git a/src/Core/Builder/Update/ProductDiscountsActionBuilder.php b/src/Core/Builder/Update/ProductDiscountsActionBuilder.php index dad24c9d42..29489978e8 100644 --- a/src/Core/Builder/Update/ProductDiscountsActionBuilder.php +++ b/src/Core/Builder/Update/ProductDiscountsActionBuilder.php @@ -11,6 +11,7 @@ use Commercetools\Core\Request\ProductDiscounts\Command\ProductDiscountChangeValueAction; use Commercetools\Core\Request\ProductDiscounts\Command\ProductDiscountSetDescriptionAction; use Commercetools\Core\Request\ProductDiscounts\Command\ProductDiscountSetValidFromAction; +use Commercetools\Core\Request\ProductDiscounts\Command\ProductDiscountSetValidFromAndUntilAction; use Commercetools\Core\Request\ProductDiscounts\Command\ProductDiscountSetValidUntilAction; class ProductDiscountsActionBuilder @@ -94,6 +95,17 @@ public function setValidFrom($action = null) return $this; } + /** + * @link https://docs.commercetools.com/http-api-projects-productDiscounts.html#set-valid-from-and-until + * @param ProductDiscountSetValidFromAndUntilAction|callable $action + * @return $this + */ + public function setValidFromAndUntil($action = null) + { + $this->addAction($this->resolveAction(ProductDiscountSetValidFromAndUntilAction::class, $action)); + return $this; + } + /** * @link https://docs.commercetools.com/http-api-projects-productDiscounts.html#set-valid-until * @param ProductDiscountSetValidUntilAction|callable $action diff --git a/src/Core/Request/ProductDiscounts/Command/ProductDiscountSetValidFromAndUntilAction.php b/src/Core/Request/ProductDiscounts/Command/ProductDiscountSetValidFromAndUntilAction.php new file mode 100644 index 0000000000..2e16cb8c61 --- /dev/null +++ b/src/Core/Request/ProductDiscounts/Command/ProductDiscountSetValidFromAndUntilAction.php @@ -0,0 +1,48 @@ + [static::TYPE => 'string'], + 'validFrom' => [ + static::TYPE => DateTime::class, + static::DECORATOR => DateTimeDecorator::class + ], + 'validUntil' => [ + static::TYPE => DateTime::class, + static::DECORATOR => DateTimeDecorator::class + ], + ]; + } + + /** + * @param array $data + * @param Context|callable $context + */ + public function __construct(array $data = [], $context = null) + { + parent::__construct($data, $context); + $this->setAction('setValidFromAndUntil'); + } +} diff --git a/tests/integration/ProductDiscount/ProductDiscountUpdateRequestTest.php b/tests/integration/ProductDiscount/ProductDiscountUpdateRequestTest.php index 1dd2871e0c..edb0103f1a 100644 --- a/tests/integration/ProductDiscount/ProductDiscountUpdateRequestTest.php +++ b/tests/integration/ProductDiscount/ProductDiscountUpdateRequestTest.php @@ -19,6 +19,7 @@ use Commercetools\Core\Request\ProductDiscounts\Command\ProductDiscountChangeValueAction; use Commercetools\Core\Request\ProductDiscounts\Command\ProductDiscountSetDescriptionAction; use Commercetools\Core\Request\ProductDiscounts\Command\ProductDiscountSetValidFromAction; +use Commercetools\Core\Request\ProductDiscounts\Command\ProductDiscountSetValidFromAndUntilAction; use Commercetools\Core\Request\ProductDiscounts\Command\ProductDiscountSetValidUntilAction; use Commercetools\Core\Request\ProductDiscounts\ProductDiscountCreateRequest; use Commercetools\Core\Request\ProductDiscounts\ProductDiscountDeleteRequest; @@ -255,4 +256,30 @@ public function testSetValidUntil() $this->assertSame($validUntil->format('c'), $result->getValidUntil()->format('c')); $this->assertNotSame($productDiscount->getVersion(), $result->getVersion()); } + + public function testSetValidFromAndUntil() + { + $draft = $this->getDraft('set-valid-from-until'); + $productDiscount = $this->createProductDiscount($draft); + + + $validFrom = new \DateTime(); + $validUntil = new \DateTime('+1 second'); + $request = ProductDiscountUpdateRequest::ofIdAndVersion( + $productDiscount->getId(), + $productDiscount->getVersion() + ) + ->addAction(ProductDiscountSetValidFromAndUntilAction::of()->setValidFrom($validFrom)->setValidUntil($validUntil)) + ; + $response = $request->executeWithClient($this->getClient()); + $result = $request->mapResponse($response); + $this->deleteRequest->setVersion($result->getVersion()); + + $this->assertInstanceOf(ProductDiscount::class, $result); + $validUntil->setTimezone(new \DateTimeZone('UTC')); + $validFrom->setTimezone(new \DateTimeZone('UTC')); + $this->assertSame($validUntil->format('c'), $result->getValidUntil()->format('c')); + $this->assertSame($validFrom->format('c'), $result->getValidFrom()->format('c')); + $this->assertNotSame($productDiscount->getVersion(), $result->getVersion()); + } }