|
7 | 7 |
|
8 | 8 | use Commercetools\Core\ApiTestCase; |
9 | 9 | use Commercetools\Core\Model\Cart\CartDraft; |
| 10 | +use Commercetools\Core\Model\Cart\CustomLineItemDraft; |
| 11 | +use Commercetools\Core\Model\Cart\CustomLineItemDraftCollection; |
10 | 12 | use Commercetools\Core\Model\Cart\LineItemDraft; |
11 | 13 | use Commercetools\Core\Model\Cart\LineItemDraftCollection; |
12 | 14 | use Commercetools\Core\Model\Common\Address; |
| 15 | +use Commercetools\Core\Model\Common\LocalizedString; |
| 16 | +use Commercetools\Core\Model\Common\Money; |
| 17 | +use Commercetools\Core\Model\Common\PriceDraft; |
| 18 | +use Commercetools\Core\Model\Common\PriceDraftCollection; |
13 | 19 | use Commercetools\Core\Model\Customer\Customer; |
14 | 20 | use Commercetools\Core\Model\Order\DeliveryItem; |
15 | 21 | use Commercetools\Core\Model\Order\DeliveryItemCollection; |
16 | 22 | use Commercetools\Core\Model\Order\Order; |
17 | 23 | use Commercetools\Core\Model\Order\OrderState; |
| 24 | +use Commercetools\Core\Model\Order\Parcel; |
| 25 | +use Commercetools\Core\Model\Order\ParcelCollection; |
18 | 26 | use Commercetools\Core\Model\Order\ParcelMeasurements; |
19 | 27 | use Commercetools\Core\Model\Order\PaymentState; |
20 | 28 | use Commercetools\Core\Model\Order\ReturnItem; |
|
23 | 31 | use Commercetools\Core\Model\Order\ReturnShipmentState; |
24 | 32 | use Commercetools\Core\Model\Order\ShipmentState; |
25 | 33 | use Commercetools\Core\Model\Order\TrackingData; |
| 34 | +use Commercetools\Core\Model\Product\ProductDraft; |
| 35 | +use Commercetools\Core\Model\Product\ProductVariantDraft; |
26 | 36 | use Commercetools\Core\Request\Carts\CartByIdGetRequest; |
27 | 37 | use Commercetools\Core\Request\Carts\CartCreateRequest; |
28 | 38 | use Commercetools\Core\Request\Carts\CartDeleteRequest; |
|
45 | 55 | use Commercetools\Core\Request\Orders\OrderCreateFromCartRequest; |
46 | 56 | use Commercetools\Core\Request\Orders\OrderDeleteRequest; |
47 | 57 | use Commercetools\Core\Request\Orders\OrderUpdateRequest; |
| 58 | +use Commercetools\Core\Request\Products\Command\ProductPublishAction; |
| 59 | +use Commercetools\Core\Request\Products\Command\ProductUnpublishAction; |
| 60 | +use Commercetools\Core\Request\Products\ProductCreateRequest; |
| 61 | +use Commercetools\Core\Request\Products\ProductDeleteRequest; |
| 62 | +use Commercetools\Core\Request\Products\ProductUpdateRequest; |
48 | 63 |
|
49 | 64 | class OrderUpdateRequestTest extends ApiTestCase |
50 | 65 | { |
@@ -304,6 +319,11 @@ public function testAddDelivery() |
304 | 319 | ->setProviderTransaction('abcdef') |
305 | 320 | ->setIsReturn(false) |
306 | 321 | ) |
| 322 | + ->setItems( |
| 323 | + DeliveryItemCollection::of()->add( |
| 324 | + DeliveryItem::of()->setId($lineItem->getId())->setQuantity(3) |
| 325 | + ) |
| 326 | + ) |
307 | 327 | ) |
308 | 328 | ; |
309 | 329 | $response = $request->executeWithClient($this->getClient()); |
@@ -468,4 +488,101 @@ public function testSetBillingAddress() |
468 | 488 | $this->assertInstanceOf(Order::class, $order); |
469 | 489 | $this->assertNotSame($draft->getBillingAddress()->getFirstName(), $order->getBillingAddress()->getFirstName()); |
470 | 490 | } |
| 491 | + |
| 492 | + public function testAddDeliveryWithParcel() |
| 493 | + { |
| 494 | + $taxCategory = $this->getTaxCategory(); |
| 495 | + $cartDraft = $this->getCartDraft(); |
| 496 | + |
| 497 | + $product2 = ProductDraft::ofTypeNameAndSlug( |
| 498 | + $this->getProductType()->getReference(), |
| 499 | + LocalizedString::ofLangAndText('en', 'test-' . $this->getTestRun() . '-product2'), |
| 500 | + LocalizedString::ofLangAndText('en', 'test-' . $this->getTestRun() . '-product2') |
| 501 | + ) |
| 502 | + ->setMasterVariant( |
| 503 | + ProductVariantDraft::of()->setSku('test-' . $this->getTestRun() . '-sku2') |
| 504 | + ->setPrices( |
| 505 | + PriceDraftCollection::of()->add( |
| 506 | + PriceDraft::ofMoney(Money::ofCurrencyAndAmount('EUR', 100)) |
| 507 | + ->setCountry('DE') |
| 508 | + ) |
| 509 | + ) |
| 510 | + ) |
| 511 | + ->setTaxCategory($this->getTaxCategory()->getReference()) |
| 512 | + ->setPublish(true) |
| 513 | + ; |
| 514 | + |
| 515 | + $request = ProductCreateRequest::ofDraft($product2); |
| 516 | + $response = $request->executeWithClient($this->getClient()); |
| 517 | + $product2 = $request->mapResponse($response); |
| 518 | + |
| 519 | + $cartDraft->getLineItems()->add(LineItemDraft::ofSku($product2->getMasterData()->getCurrent()->getMasterVariant()->getSku())->setQuantity(1)); |
| 520 | + |
| 521 | + $cartDraft->setCustomLineItems( |
| 522 | + CustomLineItemDraftCollection::of()->add( |
| 523 | + CustomLineItemDraft::of() |
| 524 | + ->setName(LocalizedString::ofLangAndText('en', 'test')) |
| 525 | + ->setSlug('test') |
| 526 | + ->setQuantity(1) |
| 527 | + ->setMoney(Money::ofCurrencyAndAmount('EUR', 100)) |
| 528 | + ->setTaxCategory($taxCategory->getReference()) |
| 529 | + ) |
| 530 | + ); |
| 531 | + $order = $this->createOrder($cartDraft); |
| 532 | + |
| 533 | + $lineItem = $order->getLineItems()->getAt(0); |
| 534 | + $lineItem2 = $order->getLineItems()->getAt(1); |
| 535 | + $customLineItem = $order->getCustomLineItems()->current(); |
| 536 | + $request = OrderUpdateRequest::ofIdAndVersion($order->getId(), $order->getVersion()) |
| 537 | + ->addAction( |
| 538 | + OrderAddDeliveryAction::ofDeliveryItems( |
| 539 | + DeliveryItemCollection::of()->add( |
| 540 | + DeliveryItem::of() |
| 541 | + ->setQuantity(2) |
| 542 | + ->setId($lineItem->getId()) |
| 543 | + ) |
| 544 | + ) |
| 545 | + ->setParcels( |
| 546 | + ParcelCollection::of()->add( |
| 547 | + Parcel::of()->setItems( |
| 548 | + DeliveryItemCollection::of()->add( |
| 549 | + DeliveryItem::of() |
| 550 | + ->setId($lineItem->getId()) |
| 551 | + ->setQuantity(2) |
| 552 | + )->add( |
| 553 | + DeliveryItem::of() |
| 554 | + ->setId($customLineItem->getId()) |
| 555 | + ->setQuantity(1) |
| 556 | + )->add( |
| 557 | + DeliveryItem::of() |
| 558 | + ->setId($lineItem2->getId()) |
| 559 | + ->setQuantity(10) |
| 560 | + ) |
| 561 | + ) |
| 562 | + ) |
| 563 | + ) |
| 564 | + ) |
| 565 | + ; |
| 566 | + $response = $request->executeWithClient($this->getClient()); |
| 567 | + $order = $request->mapFromResponse($response); |
| 568 | + $this->deleteRequest->setVersion($order->getVersion()); |
| 569 | + |
| 570 | + $this->assertCount( |
| 571 | + 3, |
| 572 | + $order->getShippingInfo()->getDeliveries()->current()->getParcels()->current()->getItems() |
| 573 | + ); |
| 574 | + |
| 575 | + |
| 576 | + $request = ProductUpdateRequest::ofIdAndVersion($product2->getId(), $product2->getVersion()) |
| 577 | + ->addAction(ProductUnpublishAction::of()); |
| 578 | + $response = $request->executeWithClient($this->getClient()); |
| 579 | + $product2 = $request->mapResponse($response); |
| 580 | + |
| 581 | + $request = ProductDeleteRequest::ofIdAndVersion( |
| 582 | + $product2->getId(), |
| 583 | + $product2->getVersion() |
| 584 | + ); |
| 585 | + $request->executeWithClient($this->getClient()); |
| 586 | + |
| 587 | + } |
471 | 588 | } |
0 commit comments