Skip to content
This repository was archived by the owner on Oct 24, 2023. It is now read-only.

Commit 2bf3e13

Browse files
committed
feat(ProductType): support product type removeEnumValues update action
Closes #388
1 parent e735afd commit 2bf3e13

File tree

9 files changed

+220
-1
lines changed

9 files changed

+220
-1
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,5 @@ myapp.ini
1515
requests.log
1616
env.list
1717
humbug.*
18-
/cache
18+
cache/
1919
github_deploy_key

src/Core/Model/Message/DeliveryItemsUpdatedMessage.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,26 @@
1414
/**
1515
* @package Commercetools\Core\Model\Message
1616
* @link https://docs.commercetools.com/http-api-projects-messages.html#deliveryitemsupdated-message
17+
* @method string getId()
18+
* @method DeliveryItemsUpdatedMessage setId(string $id = null)
19+
* @method int getVersion()
20+
* @method DeliveryItemsUpdatedMessage setVersion(int $version = null)
21+
* @method DateTimeDecorator getCreatedAt()
22+
* @method DeliveryItemsUpdatedMessage setCreatedAt(DateTime $createdAt = null)
23+
* @method DateTimeDecorator getLastModifiedAt()
24+
* @method DeliveryItemsUpdatedMessage setLastModifiedAt(DateTime $lastModifiedAt = null)
25+
* @method int getSequenceNumber()
26+
* @method DeliveryItemsUpdatedMessage setSequenceNumber(int $sequenceNumber = null)
27+
* @method Reference getResource()
28+
* @method DeliveryItemsUpdatedMessage setResource(Reference $resource = null)
29+
* @method int getResourceVersion()
30+
* @method DeliveryItemsUpdatedMessage setResourceVersion(int $resourceVersion = null)
31+
* @method string getType()
32+
* @method DeliveryItemsUpdatedMessage setType(string $type = null)
33+
* @method string getDeliveryId()
34+
* @method DeliveryItemsUpdatedMessage setDeliveryId(string $deliveryId = null)
35+
* @method DeliveryItemCollection getItems()
36+
* @method DeliveryItemsUpdatedMessage setItems(DeliveryItemCollection $items = null)
1737
*/
1838
class DeliveryItemsUpdatedMessage extends Message
1939
{

src/Core/Model/Message/DeliveryRemovedMessage.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,24 @@
1313
/**
1414
* @package Commercetools\Core\Model\Message
1515
* @link https://docs.commercetools.com/http-api-projects-messages.html#deliveryremoved-message
16+
* @method string getId()
17+
* @method DeliveryRemovedMessage setId(string $id = null)
18+
* @method int getVersion()
19+
* @method DeliveryRemovedMessage setVersion(int $version = null)
20+
* @method DateTimeDecorator getCreatedAt()
21+
* @method DeliveryRemovedMessage setCreatedAt(DateTime $createdAt = null)
22+
* @method DateTimeDecorator getLastModifiedAt()
23+
* @method DeliveryRemovedMessage setLastModifiedAt(DateTime $lastModifiedAt = null)
24+
* @method int getSequenceNumber()
25+
* @method DeliveryRemovedMessage setSequenceNumber(int $sequenceNumber = null)
26+
* @method Reference getResource()
27+
* @method DeliveryRemovedMessage setResource(Reference $resource = null)
28+
* @method int getResourceVersion()
29+
* @method DeliveryRemovedMessage setResourceVersion(int $resourceVersion = null)
30+
* @method string getType()
31+
* @method DeliveryRemovedMessage setType(string $type = null)
32+
* @method Delivery getDelivery()
33+
* @method DeliveryRemovedMessage setDelivery(Delivery $delivery = null)
1634
*/
1735
class DeliveryRemovedMessage extends Message
1836
{

src/Core/Model/Message/ParcelItemsUpdatedMessage.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,28 @@
1515
/**
1616
* @package Commercetools\Core\Model\Message
1717
* @link https://docs.commercetools.com/http-api-projects-messages.html#parceltrackingdataupdated-message
18+
* @method string getId()
19+
* @method ParcelItemsUpdatedMessage setId(string $id = null)
20+
* @method int getVersion()
21+
* @method ParcelItemsUpdatedMessage setVersion(int $version = null)
22+
* @method DateTimeDecorator getCreatedAt()
23+
* @method ParcelItemsUpdatedMessage setCreatedAt(DateTime $createdAt = null)
24+
* @method DateTimeDecorator getLastModifiedAt()
25+
* @method ParcelItemsUpdatedMessage setLastModifiedAt(DateTime $lastModifiedAt = null)
26+
* @method int getSequenceNumber()
27+
* @method ParcelItemsUpdatedMessage setSequenceNumber(int $sequenceNumber = null)
28+
* @method Reference getResource()
29+
* @method ParcelItemsUpdatedMessage setResource(Reference $resource = null)
30+
* @method int getResourceVersion()
31+
* @method ParcelItemsUpdatedMessage setResourceVersion(int $resourceVersion = null)
32+
* @method string getType()
33+
* @method ParcelItemsUpdatedMessage setType(string $type = null)
34+
* @method string getDeliveryId()
35+
* @method ParcelItemsUpdatedMessage setDeliveryId(string $deliveryId = null)
36+
* @method string getParcelId()
37+
* @method ParcelItemsUpdatedMessage setParcelId(string $parcelId = null)
38+
* @method DeliveryItemCollection getItems()
39+
* @method ParcelItemsUpdatedMessage setItems(DeliveryItemCollection $items = null)
1840
*/
1941
class ParcelItemsUpdatedMessage extends Message
2042
{

src/Core/Model/Message/ParcelMeasurementsUpdatedMessage.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,28 @@
1616
/**
1717
* @package Commercetools\Core\Model\Message
1818
* @link https://docs.commercetools.com/http-api-projects-messages.html#parcelmeasurementsupdated-message
19+
* @method string getId()
20+
* @method ParcelMeasurementsUpdatedMessage setId(string $id = null)
21+
* @method int getVersion()
22+
* @method ParcelMeasurementsUpdatedMessage setVersion(int $version = null)
23+
* @method DateTimeDecorator getCreatedAt()
24+
* @method ParcelMeasurementsUpdatedMessage setCreatedAt(DateTime $createdAt = null)
25+
* @method DateTimeDecorator getLastModifiedAt()
26+
* @method ParcelMeasurementsUpdatedMessage setLastModifiedAt(DateTime $lastModifiedAt = null)
27+
* @method int getSequenceNumber()
28+
* @method ParcelMeasurementsUpdatedMessage setSequenceNumber(int $sequenceNumber = null)
29+
* @method Reference getResource()
30+
* @method ParcelMeasurementsUpdatedMessage setResource(Reference $resource = null)
31+
* @method int getResourceVersion()
32+
* @method ParcelMeasurementsUpdatedMessage setResourceVersion(int $resourceVersion = null)
33+
* @method string getType()
34+
* @method ParcelMeasurementsUpdatedMessage setType(string $type = null)
35+
* @method string getDeliveryId()
36+
* @method ParcelMeasurementsUpdatedMessage setDeliveryId(string $deliveryId = null)
37+
* @method string getParcelId()
38+
* @method ParcelMeasurementsUpdatedMessage setParcelId(string $parcelId = null)
39+
* @method ParcelMeasurements getMeasurements()
40+
* @method ParcelMeasurementsUpdatedMessage setMeasurements(ParcelMeasurements $measurements = null)
1941
*/
2042
class ParcelMeasurementsUpdatedMessage extends Message
2143
{

src/Core/Model/Message/ParcelRemovedFromDeliveryMessage.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,26 @@
1515
/**
1616
* @package Commercetools\Core\Model\Message
1717
* @link https://docs.commercetools.com/http-api-projects-messages.html#parcelremovedfromdelivery-message
18+
* @method string getId()
19+
* @method ParcelRemovedFromDeliveryMessage setId(string $id = null)
20+
* @method int getVersion()
21+
* @method ParcelRemovedFromDeliveryMessage setVersion(int $version = null)
22+
* @method DateTimeDecorator getCreatedAt()
23+
* @method ParcelRemovedFromDeliveryMessage setCreatedAt(DateTime $createdAt = null)
24+
* @method DateTimeDecorator getLastModifiedAt()
25+
* @method ParcelRemovedFromDeliveryMessage setLastModifiedAt(DateTime $lastModifiedAt = null)
26+
* @method int getSequenceNumber()
27+
* @method ParcelRemovedFromDeliveryMessage setSequenceNumber(int $sequenceNumber = null)
28+
* @method Reference getResource()
29+
* @method ParcelRemovedFromDeliveryMessage setResource(Reference $resource = null)
30+
* @method int getResourceVersion()
31+
* @method ParcelRemovedFromDeliveryMessage setResourceVersion(int $resourceVersion = null)
32+
* @method string getType()
33+
* @method ParcelRemovedFromDeliveryMessage setType(string $type = null)
34+
* @method string getDeliveryId()
35+
* @method ParcelRemovedFromDeliveryMessage setDeliveryId(string $deliveryId = null)
36+
* @method Parcel getParcel()
37+
* @method ParcelRemovedFromDeliveryMessage setParcel(Parcel $parcel = null)
1838
*/
1939
class ParcelRemovedFromDeliveryMessage extends Message
2040
{

src/Core/Model/Message/ParcelTrackingDataUpdatedMessage.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,28 @@
1616
/**
1717
* @package Commercetools\Core\Model\Message
1818
* @link https://docs.commercetools.com/http-api-projects-messages.html#parceltrackingdataupdated-message
19+
* @method string getId()
20+
* @method ParcelTrackingDataUpdatedMessage setId(string $id = null)
21+
* @method int getVersion()
22+
* @method ParcelTrackingDataUpdatedMessage setVersion(int $version = null)
23+
* @method DateTimeDecorator getCreatedAt()
24+
* @method ParcelTrackingDataUpdatedMessage setCreatedAt(DateTime $createdAt = null)
25+
* @method DateTimeDecorator getLastModifiedAt()
26+
* @method ParcelTrackingDataUpdatedMessage setLastModifiedAt(DateTime $lastModifiedAt = null)
27+
* @method int getSequenceNumber()
28+
* @method ParcelTrackingDataUpdatedMessage setSequenceNumber(int $sequenceNumber = null)
29+
* @method Reference getResource()
30+
* @method ParcelTrackingDataUpdatedMessage setResource(Reference $resource = null)
31+
* @method int getResourceVersion()
32+
* @method ParcelTrackingDataUpdatedMessage setResourceVersion(int $resourceVersion = null)
33+
* @method string getType()
34+
* @method ParcelTrackingDataUpdatedMessage setType(string $type = null)
35+
* @method string getDeliveryId()
36+
* @method ParcelTrackingDataUpdatedMessage setDeliveryId(string $deliveryId = null)
37+
* @method string getParcelId()
38+
* @method ParcelTrackingDataUpdatedMessage setParcelId(string $parcelId = null)
39+
* @method TrackingData getTrackingData()
40+
* @method ParcelTrackingDataUpdatedMessage setTrackingData(TrackingData $trackingData = null)
1941
*/
2042
class ParcelTrackingDataUpdatedMessage extends Message
2143
{
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<?php
2+
/**
3+
* @author @jenschude <jens.schulze@commercetools.de>
4+
*/
5+
6+
namespace Commercetools\Core\Request\ProductTypes\Command;
7+
8+
use Commercetools\Core\Model\Common\Context;
9+
use Commercetools\Core\Model\Common\Enum;
10+
use Commercetools\Core\Request\AbstractAction;
11+
12+
/**
13+
* @package Commercetools\Core\Request\ProductTypes\Command
14+
* @link https://docs.commercetools.com/http-api-projects-productTypes.html#remove-enumvalues-from-attributedefinition
15+
* @method string getAction()
16+
* @method ProductTypeRemoveEnumValuesAction setAction(string $action = null)
17+
* @method string getAttributeName()
18+
* @method ProductTypeRemoveEnumValuesAction setAttributeName(string $attributeName = null)
19+
* @method array getKeys()
20+
* @method ProductTypeRemoveEnumValuesAction setKeys(array $keys = null)
21+
*/
22+
class ProductTypeRemoveEnumValuesAction extends AbstractAction
23+
{
24+
public function fieldDefinitions()
25+
{
26+
return [
27+
'action' => [static::TYPE => 'string'],
28+
'attributeName' => [static::TYPE => 'string'],
29+
'keys' => [static::TYPE => 'array']
30+
];
31+
}
32+
33+
/**
34+
* @param array $data
35+
* @param Context|callable $context
36+
*/
37+
public function __construct(array $data = [], $context = null)
38+
{
39+
parent::__construct($data, $context);
40+
$this->setAction('removeEnumValues');
41+
}
42+
43+
/**
44+
* @param string $attributeName
45+
* @param array $keys
46+
* @param Context|callable $context
47+
* @return ProductTypeAddPlainEnumValueAction
48+
*/
49+
public static function ofAttributeNameAndKeys($attributeName, array $keys, $context = null)
50+
{
51+
return static::of($context)->setAttributeName($attributeName)->setKeys($keys);
52+
}
53+
}

tests/integration/ProductType/ProductTypeUpdateRequestTest.php

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
use Commercetools\Core\Request\ProductTypes\Command\ProductTypeChangeNameAction;
5050
use Commercetools\Core\Request\ProductTypes\Command\ProductTypeChangePlainEnumLabelAction;
5151
use Commercetools\Core\Request\ProductTypes\Command\ProductTypeRemoveAttributeDefinitionAction;
52+
use Commercetools\Core\Request\ProductTypes\Command\ProductTypeRemoveEnumValuesAction;
5253
use Commercetools\Core\Request\ProductTypes\Command\ProductTypeSetInputTipAction;
5354
use Commercetools\Core\Request\ProductTypes\Command\ProductTypeSetKeyAction;
5455
use Commercetools\Core\Request\ProductTypes\ProductTypeCreateRequest;
@@ -694,4 +695,45 @@ public function testChangeConstraint()
694695
$this->assertSame($constraint, $result->getAttributes()->current()->getAttributeConstraint());
695696
$this->assertNotSame($productType->getVersion(), $result->getVersion());
696697
}
698+
699+
public function testRemoveEnumValues()
700+
{
701+
$draft = $this->getDraft('remove-enum-values');
702+
$definition = AttributeDefinition::of()
703+
->setName('testEnumField')
704+
->setLabel(LocalizedString::ofLangAndText('en', 'testEnumField'))
705+
->setIsRequired(false)
706+
->setType(EnumType::of()->setValues(
707+
EnumCollection::of()
708+
->add(Enum::of()->setKey('foo')->setLabel('foo'))
709+
->add(Enum::of()->setKey('bar')->setLabel('bar'))
710+
)
711+
);
712+
$draft->setAttributes(AttributeDefinitionCollection::of()->add($definition));
713+
$productType = $this->createProductType($draft);
714+
715+
$this->assertInstanceOf(ProductType::class, $productType);
716+
/**
717+
* @var EnumType $attributeType
718+
*/
719+
$attributeType = $productType->getAttributes()->current()->getType();
720+
$this->assertCount(2, $attributeType->getValues());
721+
722+
723+
$request = ProductTypeUpdateRequest::ofIdAndVersion($productType->getId(), $productType->getVersion())
724+
->addAction(
725+
ProductTypeRemoveEnumValuesAction::ofAttributeNameAndKeys('testEnumField', ['foo'])
726+
);
727+
$response = $request->executeWithClient($this->getClient());
728+
$result = $request->mapResponse($response);
729+
$this->productTypeDeleteRequest->setVersion($result->getVersion());
730+
731+
$this->assertInstanceOf(ProductType::class, $result);
732+
/**
733+
* @var EnumType $type
734+
*/
735+
$type = $result->getAttributes()->current()->getType();
736+
$this->assertCount(1, $type->getValues());
737+
$this->assertSame('bar', $type->getValues()->current()->getKey());
738+
}
697739
}

0 commit comments

Comments
 (0)