magento2-docker/dev/tests/integration/testsuite/Magento/Framework/MessageQueue/MessageEncoderTest.php

230 lines
8.3 KiB
PHP
Executable File

<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\MessageQueue;
use Magento\Framework\ObjectManagerInterface;
use Magento\Framework\MessageQueue\MessageEncoder;
use Magento\Framework\Communication\Config;
/**
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
*/
class MessageEncoderTest extends \PHPUnit\Framework\TestCase
{
/** @var MessageEncoder */
protected $encoder;
/** @var \Magento\Framework\ObjectManagerInterface */
protected $objectManager;
protected function setUp(): void
{
$this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
$this->encoder = $this->objectManager->create(MessageEncoder::class);
$this->setBackwardCompatibleProperty(
$this->encoder,
'communicationConfig',
$this->getConfig()
);
parent::setUp();
}
/**
* @magentoDataFixture Magento/Customer/_files/customer.php
* @magentoDataFixture Magento/Customer/_files/customer_address.php
*/
public function testEncode()
{
/** @var \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository */
$customerRepository = $this->objectManager->create(\Magento\Customer\Api\CustomerRepositoryInterface::class);
$fixtureCustomerId = 1;
$customer = $customerRepository->getById($fixtureCustomerId);
/** @var \Magento\Customer\Api\Data\CustomerExtensionInterface $customerExtension */
$customerExtension = $this->objectManager->create(\Magento\Customer\Api\Data\CustomerExtension::class);
$customerExtension->setTestGroupCode('Some Group Code');
$customer->setExtensionAttributes($customerExtension);
$encodedCustomerData = json_decode($this->encoder->encode('customer.created', $customer), true);
$createdAt = $customer->getCreatedAt();
$updatedAt = $customer->getUpdatedAt();
$expectedEncodedCustomerData = json_decode($this->getCustomerDataAsJson($createdAt, $updatedAt), true);
$this->assertEquals($expectedEncodedCustomerData, $encodedCustomerData);
}
/**
* @magentoDataFixture Magento/Customer/_files/customer.php
* @magentoDataFixture Magento/Customer/_files/customer_address.php
*/
public function testEncodeArrayOfEntities()
{
/** @var \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository */
$customerRepository = $this->objectManager->create(\Magento\Customer\Api\CustomerRepositoryInterface::class);
$fixtureCustomerId = 1;
$customer = $customerRepository->getById($fixtureCustomerId);
/** @var \Magento\Customer\Api\Data\CustomerExtensionInterface $customerExtension */
$customerExtension = $this->objectManager->create(\Magento\Customer\Api\Data\CustomerExtension::class);
$customerExtension->setTestGroupCode('Some Group Code');
$customer->setExtensionAttributes($customerExtension);
$encodedCustomerData = json_decode($this->encoder->encode('customer.list.retrieved', [$customer]), true);
$createdAt = $customer->getCreatedAt();
$updatedAt = $customer->getUpdatedAt();
$expectedEncodedCustomerData = json_decode($this->getCustomerDataAsJson($createdAt, $updatedAt), true);
$this->assertEquals($expectedEncodedCustomerData, $encodedCustomerData[0]);
}
public function testDecode()
{
$encodedMessage = $this->getCustomerDataAsJson('2015-07-22 12:43:36', '2015-07-22 12:45:36');
/** @var \Magento\Customer\Api\Data\CustomerInterface $decodedCustomerObject */
$decodedCustomerObject = $this->encoder->decode('customer.created', $encodedMessage);
$this->assertInstanceOf(\Magento\Customer\Api\Data\CustomerInterface::class, $decodedCustomerObject);
$this->assertEquals('customer@example.com', $decodedCustomerObject->getEmail());
$this->assertEquals(1, $decodedCustomerObject->getGroupId());
$this->assertInstanceOf(
\Magento\Customer\Api\Data\CustomerExtensionInterface::class,
$decodedCustomerObject->getExtensionAttributes()
);
$this->assertEquals('Some Group Code', $decodedCustomerObject->getExtensionAttributes()->getTestGroupCode());
$addresses = $decodedCustomerObject->getAddresses();
$this->assertCount(1, $addresses, "Address was not decoded.");
$this->assertInstanceOf(
\Magento\Customer\Api\Data\AddressInterface::class,
$addresses[0]
);
$this->assertEquals('3468676', $addresses[0]->getTelephone());
$this->assertTrue($addresses[0]->isDefaultBilling());
$this->assertInstanceOf(
\Magento\Customer\Api\Data\RegionInterface::class,
$addresses[0]->getRegion()
);
$this->assertEquals('AL', $addresses[0]->getRegion()->getRegionCode());
}
/**
*/
public function testDecodeInvalidMessageFormat()
{
$this->expectException(\Magento\Framework\Exception\LocalizedException::class);
$this->expectExceptionMessage('Error occurred during message decoding');
$this->encoder->decode('customer.created', "{");
}
/**
*/
public function testDecodeInvalidMessage()
{
$this->expectException(\LogicException::class);
$message = 'Property "NotExistingField" does not have accessor method "getNotExistingField" in class '
. '"Magento\Customer\Api\Data\CustomerInterface".';
$this->expectExceptionMessage($message);
$this->encoder->decode('customer.created', '{"not_existing_field": "value"}');
}
/**
*/
public function testDecodeIncorrectMessage()
{
$this->expectException(\Magento\Framework\Exception\LocalizedException::class);
$this->expectExceptionMessage('Error occurred during message decoding');
$this->encoder->decode('customer.created', "{");
}
/**
* @return \Magento\Framework\MessageQueue\Config
*/
protected function getConfig()
{
$newData = include __DIR__ . '/_files/encoder_communication.php';
/** @var \Magento\Framework\Communication\Config\Data $configData */
$configData = $this->objectManager->create(\Magento\Framework\Communication\Config\Data::class);
$configData->reset();
$configData->merge($newData);
$config = $this->objectManager->create(Config::class, ['configData' => $configData]);
return $config;
}
/**
* Get fixture customer data in Json format
*
* @param string $createdAt
* @param string $updatedAt
* @return string
*/
protected function getCustomerDataAsJson($createdAt, $updatedAt)
{
return <<<JSON
{
"id": 1,
"group_id": 1,
"default_billing": "1",
"default_shipping": "1",
"created_at": "{$createdAt}",
"updated_at": "{$updatedAt}",
"email": "customer@example.com",
"firstname": "John",
"lastname": "Smith",
"middlename": "A",
"prefix": "Mr.",
"suffix": "Esq.",
"gender": 0,
"store_id": 1,
"taxvat": "12",
"website_id": 1,
"addresses": [
{
"id": 1,
"customer_id": 1,
"region": {
"region_code": "AL",
"region": "Alabama",
"region_id": 1
},
"region_id": 1,
"country_id": "US",
"street": [
"Green str, 67"
],
"company": "CompanyName",
"telephone": "3468676",
"postcode": "75477",
"city": "CityM",
"firstname": "John",
"lastname": "Smith",
"default_shipping": true,
"default_billing": true
}
],
"disable_auto_group_change": 0,
"extension_attributes": {
"test_group_code": "Some Group Code"
}
}
JSON;
}
/**
* Set mocked property
*
* @param object $object
* @param string $propertyName
* @param object $propertyValue
* @return void
*/
public function setBackwardCompatibleProperty($object, $propertyName, $propertyValue)
{
$reflection = new \ReflectionClass(get_class($object));
$reflectionProperty = $reflection->getProperty($propertyName);
$reflectionProperty->setAccessible(true);
$reflectionProperty->setValue($object, $propertyValue);
}
}