Skip to content
Merged
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
8 changes: 8 additions & 0 deletions src/Model/Callback/Entity/Delivery/PackageItem.php
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,14 @@ class PackageItem
*/
public $markingCodes;

/**
* @var \RetailCrm\Api\Model\Entity\MarkingObject[]
*
* @JMS\Type("array<RetailCrm\Api\Model\Entity\MarkingObject>")
* @JMS\SerializedName("markingObjects")
*/
public $markingObjects;

/**
* @var array<string, mixed>
*
Expand Down
37 changes: 37 additions & 0 deletions src/Model/Entity/MarkingObject.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?php

/**
* PHP version 7.3
*
* @category MarkingObject
* @package RetailCrm\Api\Model\Entity
*/

namespace RetailCrm\Api\Model\Entity;

use RetailCrm\Api\Component\Serializer\Annotation as JMS;

/**
* Class MarkingObject
*
* @category MarkingObject
* @package RetailCrm\Api\Model\Entity
*/
class MarkingObject
{
/**
* @var string
*
* @JMS\Type("string")
* @JMS\SerializedName("code")
*/
public $code;

/**
* @var string
*
* @JMS\Type("string")
* @JMS\SerializedName("provider")
*/
public $provider;
}
8 changes: 8 additions & 0 deletions src/Model/Entity/Orders/Items/OrderProduct.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,14 @@ class OrderProduct
*/
public $markingCodes;

/**
* @var \RetailCrm\Api\Model\Entity\MarkingObject[]
*
* @JMS\Type("array<RetailCrm\Api\Model\Entity\MarkingObject>")
* @JMS\SerializedName("markingObjects")
*/
public $markingObjects;

/**
* @var int
*
Expand Down
130 changes: 130 additions & 0 deletions tests/src/Model/Callback/Entity/Delivery/PackageItemTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
<?php

/**
* PHP version 7.3
*
* @category PackageItemTest
* @package RetailCrm\Tests\Model\Callback\Entity\Delivery
*/

namespace RetailCrm\Tests\Model\Callback\Entity\Delivery;

use PHPUnit\Framework\TestCase;
use RetailCrm\Api\Factory\SerializerFactory;
use RetailCrm\Api\Model\Callback\Entity\Delivery\PackageItem;
use RetailCrm\Api\Model\Entity\MarkingObject;

/**
* Class PackageItemTest
*
* @category PackageItemTest
* @package RetailCrm\Tests\Model\Callback\Entity\Delivery
*/
class PackageItemTest extends TestCase
{
public function testDeserializeWithoutMarkingObjects(): void
{
/** @var PackageItem $packageItem */
$packageItem = SerializerFactory::create()->fromArray(
['markingCodes' => ['legacy-code']],
PackageItem::class
);

self::assertNull($packageItem->markingObjects);
self::assertSame(['legacy-code'], $packageItem->markingCodes);
}

public function testDeserializeEmptyMarkingObjects(): void
{
/** @var PackageItem $packageItem */
$packageItem = SerializerFactory::create()->fromArray(
[
'markingObjects' => [],
'markingCodes' => ['legacy-code'],
],
PackageItem::class
);

self::assertSame([], $packageItem->markingObjects);
self::assertSame(['legacy-code'], $packageItem->markingCodes);
}

public function testDeserializeNullMarkingObjects(): void
{
/** @var PackageItem $packageItem */
$packageItem = SerializerFactory::create()->fromArray(
[
'markingObjects' => null,
'markingCodes' => ['legacy-code'],
],
PackageItem::class
);

self::assertNull($packageItem->markingObjects);
self::assertSame(['legacy-code'], $packageItem->markingCodes);
}

/**
* @param array<int, array<string, string>> $markingObjects
*
* @dataProvider markingObjectsProvider
*/
public function testDeserializeMarkingObjects(array $markingObjects): void
{
/** @var PackageItem $packageItem */
$packageItem = SerializerFactory::create()->fromArray(
[
'markingObjects' => $markingObjects,
'markingCodes' => ['legacy-code'],
],
PackageItem::class
);

self::assertCount(count($markingObjects), $packageItem->markingObjects);

foreach ($markingObjects as $index => $expected) {
self::assertInstanceOf(MarkingObject::class, $packageItem->markingObjects[$index]);
self::assertSame($expected['code'], $packageItem->markingObjects[$index]->code);
self::assertSame($expected['provider'], $packageItem->markingObjects[$index]->provider);
}

self::assertSame(['legacy-code'], $packageItem->markingCodes);
}

/**
* @return array<string, array<int, array<int, array<string, string>>>>
*/
public function markingObjectsProvider(): array
{
return [
'one marking object' => [
[
[
'code' => 'chestny-znak-code',
'provider' => 'chestny_znak',
],
],
],
'multiple marking objects' => [
[
[
'code' => '1234567890123456',
'provider' => 'giis_dmdk',
],
[
'code' => 'chestny-znak-code',
'provider' => 'chestny_znak',
],
],
],
'unknown provider' => [
[
[
'code' => 'future-provider-code',
'provider' => 'future_provider',
],
],
],
];
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
<?php

/**
* PHP version 7.3
*
* @category RequestSaveTest
* @package RetailCrm\Tests\Model\Callback\Entity\Delivery\RequestProperty
*/

namespace RetailCrm\Tests\Model\Callback\Entity\Delivery\RequestProperty;

use PHPUnit\Framework\TestCase;
use RetailCrm\Api\Factory\SerializerFactory;
use RetailCrm\Api\Model\Callback\Entity\Delivery\RequestProperty\RequestSave;
use RetailCrm\Api\Model\Entity\MarkingObject;

/**
* Class RequestSaveTest
*
* @category RequestSaveTest
* @package RetailCrm\Tests\Model\Callback\Entity\Delivery\RequestProperty
*/
class RequestSaveTest extends TestCase
{
public function testDeserializePackageItemMarkingObjects(): void
{
/** @var RequestSave $request */
$request = SerializerFactory::create()->fromArray(
[
'packages' => [
[
'items' => [
[
'markingObjects' => [
[
'code' => '1234567890123456',
'provider' => 'giis_dmdk',
],
],
'markingCodes' => ['legacy-code'],
],
],
],
],
],
RequestSave::class
);

$packageItem = $request->packages[0]->items[0];

self::assertInstanceOf(MarkingObject::class, $packageItem->markingObjects[0]);
self::assertSame('1234567890123456', $packageItem->markingObjects[0]->code);
self::assertSame('giis_dmdk', $packageItem->markingObjects[0]->provider);
self::assertSame(['legacy-code'], $packageItem->markingCodes);
}
}
76 changes: 76 additions & 0 deletions tests/src/Model/Entity/Orders/Items/OrderProductTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
<?php

/**
* PHP version 7.3
*
* @category OrderProductTest
* @package RetailCrm\Tests\Model\Entity\Orders\Items
*/

namespace RetailCrm\Tests\Model\Entity\Orders\Items;

use PHPUnit\Framework\TestCase;
use RetailCrm\Api\Factory\SerializerFactory;
use RetailCrm\Api\Model\Entity\MarkingObject;
use RetailCrm\Api\Model\Entity\Orders\Items\OrderProduct;

/**
* Class OrderProductTest
*
* @category OrderProductTest
* @package RetailCrm\Tests\Model\Entity\Orders\Items
*/
class OrderProductTest extends TestCase
{
public function testMarkingObjectsRoundTrip(): void
{
$serializer = SerializerFactory::create();
$data = [
'markingObjects' => [
[
'code' => 'chestny-znak-code',
'provider' => 'chestny_znak',
],
[
'code' => '1234567890123456',
'provider' => 'giis_dmdk',
],
],
];

/** @var OrderProduct $orderProduct */
$orderProduct = $serializer->fromArray($data, OrderProduct::class);

self::assertCount(2, $orderProduct->markingObjects);
self::assertContainsOnlyInstancesOf(MarkingObject::class, $orderProduct->markingObjects);
self::assertSame('chestny-znak-code', $orderProduct->markingObjects[0]->code);
self::assertSame('chestny_znak', $orderProduct->markingObjects[0]->provider);
self::assertSame('1234567890123456', $orderProduct->markingObjects[1]->code);
self::assertSame('giis_dmdk', $orderProduct->markingObjects[1]->provider);
self::assertSame($data, $serializer->toArray($orderProduct));
}

public function testLegacyMarkingCodesRoundTrip(): void
{
$serializer = SerializerFactory::create();
$data = ['markingCodes' => ['legacy-code']];

/** @var OrderProduct $orderProduct */
$orderProduct = $serializer->fromArray($data, OrderProduct::class);

self::assertNull($orderProduct->markingObjects);
self::assertSame($data, $serializer->toArray($orderProduct));
}

public function testEmptyMarkingObjectsRoundTrip(): void
{
$serializer = SerializerFactory::create();
$data = ['markingObjects' => []];

/** @var OrderProduct $orderProduct */
$orderProduct = $serializer->fromArray($data, OrderProduct::class);

self::assertSame([], $orderProduct->markingObjects);
self::assertSame($data, $serializer->toArray($orderProduct));
}
}
26 changes: 26 additions & 0 deletions tests/src/ResourceGroup/OrdersTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
use RetailCrm\Api\Enum\RequestMethod;
use RetailCrm\Api\Model\Entity\Delivery\SerializedEntityOrder;
use RetailCrm\Api\Model\Entity\FixExternalRow;
use RetailCrm\Api\Model\Entity\MarkingObject;
use RetailCrm\Api\Model\Entity\Orders\Delivery\OrderDeliveryAddress;
use RetailCrm\Api\Model\Entity\Orders\Delivery\SerializedOrderDelivery;
use RetailCrm\Api\Model\Entity\Orders\Items\AbstractDiscount;
Expand Down Expand Up @@ -833,6 +834,12 @@ public function testCreate(): void
"items": [
{
"markingCodes": [],
"markingObjects": [
{
"code": "1234567890123456",
"provider": "giis_dmdk"
}
],
"id": 11308,
"priceType": {
"code": "base"
Expand Down Expand Up @@ -904,6 +911,7 @@ public function testCreate(): void
$deliveryAddress = new OrderDeliveryAddress();
$offer = new Offer();
$item = new OrderProduct();
$markingObject = new MarkingObject();

$payment->type = 'bank-card';
$payment->status = 'paid';
Expand Down Expand Up @@ -933,6 +941,10 @@ public function testCreate(): void
$item->purchasePrice = 60;
$item->discounts = [new AbstractDiscount(DiscountType::MANUAL_PRODUCT, 1)];

$markingObject->code = '1234567890123456';
$markingObject->provider = 'giis_dmdk';
$item->markingObjects = [$markingObject];

$order->delivery = $delivery;
$order->items = [$item];
$order->payments = [$payment];
Expand Down Expand Up @@ -964,6 +976,20 @@ public function testCreate(): void
$request->order = $order;
$request->site = 'moysklad';

$encodedRequest = static::encodeFormArray($request);
$encodedOrder = json_decode($encodedRequest['order'], true, 512, JSON_THROW_ON_ERROR);

self::assertSame(
[
[
'code' => '1234567890123456',
'provider' => 'giis_dmdk',
],
],
$encodedOrder['items'][0]['markingObjects']
);
self::assertArrayNotHasKey('markingCodes', $encodedOrder['items'][0]);

$mock = static::createApiMockBuilder('orders/create');
$mock->matchMethod(RequestMethod::POST)
->matchBody(static::encodeForm($request))
Expand Down
Loading