277 lines
9.8 KiB
PHP
Executable File
277 lines
9.8 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
|
|
/**
|
|
* Class to test routing based on Service Versioning(for V1 version of a service)
|
|
*/
|
|
namespace Magento\Webapi\Routing;
|
|
|
|
use Magento\Framework\Api\AttributeValue;
|
|
use Magento\TestFramework\Authentication\OauthHelper;
|
|
use Magento\TestFramework\Helper\Bootstrap;
|
|
use Magento\TestModule1\Service\V1\Entity\Item;
|
|
use Magento\TestModule1\Service\V1\Entity\ItemFactory;
|
|
|
|
class ServiceVersionV1Test extends \Magento\Webapi\Routing\BaseService
|
|
{
|
|
/**
|
|
* @var string
|
|
*/
|
|
protected $_version;
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
protected $_restResourcePath;
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
protected $_soapService = 'testModule1AllSoapAndRest';
|
|
|
|
/** @var \Magento\Framework\Api\AttributeValueFactory */
|
|
protected $valueFactory;
|
|
|
|
/** @var ItemFactory */
|
|
protected $itemFactory;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
$this->_version = 'V1';
|
|
$this->_soapService = 'testModule1AllSoapAndRestV1';
|
|
$this->_restResourcePath = "/{$this->_version}/testmodule1/";
|
|
|
|
$this->valueFactory = Bootstrap::getObjectManager()->create(
|
|
\Magento\Framework\Api\AttributeValueFactory::class
|
|
);
|
|
|
|
$this->itemFactory = Bootstrap::getObjectManager()->create(
|
|
\Magento\TestModule1\Service\V1\Entity\ItemFactory::class
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Test get item
|
|
*/
|
|
public function testItem()
|
|
{
|
|
$itemId = 1;
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => $this->_restResourcePath . $itemId,
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
|
|
],
|
|
'soap' => ['service' => $this->_soapService, 'operation' => $this->_soapService . 'Item'],
|
|
];
|
|
$requestData = ['itemId' => $itemId];
|
|
$item = $this->_webApiCall($serviceInfo, $requestData);
|
|
$this->assertEquals('testProduct1', $item['name'], 'Item was retrieved unsuccessfully');
|
|
}
|
|
|
|
/**
|
|
* Test get item with any type
|
|
* @SuppressWarnings(PHPMD.UnusedLocalVariable)
|
|
*/
|
|
public function testItemAnyType()
|
|
{
|
|
$this->_markTestAsRestOnly('Test will fail for SOAP because attribute values get converted to strings.');
|
|
$customerAttributes = [
|
|
Item::CUSTOM_ATTRIBUTE_1 => [
|
|
AttributeValue::ATTRIBUTE_CODE => Item::CUSTOM_ATTRIBUTE_1,
|
|
AttributeValue::VALUE => '12345',
|
|
],
|
|
Item::CUSTOM_ATTRIBUTE_2 => [
|
|
AttributeValue::ATTRIBUTE_CODE => Item::CUSTOM_ATTRIBUTE_2,
|
|
AttributeValue::VALUE => 12345,
|
|
],
|
|
Item::CUSTOM_ATTRIBUTE_3 => [
|
|
AttributeValue::ATTRIBUTE_CODE => Item::CUSTOM_ATTRIBUTE_3,
|
|
AttributeValue::VALUE => true,
|
|
],
|
|
];
|
|
|
|
$attributeValue1 = $this->valueFactory->create()
|
|
->setAttributeCode(Item::CUSTOM_ATTRIBUTE_1)
|
|
->setValue('12345');
|
|
$attributeValue2 = $this->valueFactory->create()
|
|
->setAttributeCode(Item::CUSTOM_ATTRIBUTE_2)
|
|
->setValue(12345);
|
|
$attributeValue3 = $this->valueFactory->create()
|
|
->setAttributeCode(Item::CUSTOM_ATTRIBUTE_3)
|
|
->setValue(true);
|
|
|
|
$item = $this->itemFactory->create()
|
|
->setItemId(1)
|
|
->setName('testProductAnyType')
|
|
->setCustomAttributes([$attributeValue1, $attributeValue2, $attributeValue3]);
|
|
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => $this->_restResourcePath . 'itemAnyType',
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
|
|
],
|
|
'soap' => ['service' => $this->_soapService, 'operation' => $this->_soapService . 'ItemAnyType'],
|
|
];
|
|
$requestData = $item->__toArray();
|
|
$item = $this->_webApiCall($serviceInfo, ['entityItem' => $requestData]);
|
|
|
|
$this->assertSame(
|
|
$attributeValue1->getValue(),
|
|
$item['custom_attributes'][0]['value'],
|
|
'Serialized attribute value type does\'t match pre-defined type.'
|
|
); // string '12345' is expected
|
|
|
|
$this->assertSame(
|
|
$attributeValue2->getValue(),
|
|
$item['custom_attributes'][1]['value'],
|
|
'Serialized attribute value type does\'t match pre-defined type.'
|
|
); // integer 12345 is expected
|
|
|
|
$this->assertSame(
|
|
$attributeValue3->getValue(),
|
|
$item['custom_attributes'][2]['value'],
|
|
'Serialized attribute value type does\'t match pre-defined type.'
|
|
); // boolean true is expected
|
|
}
|
|
|
|
/**
|
|
* Test fetching all items
|
|
*/
|
|
public function testItems()
|
|
{
|
|
$itemArr = [['item_id' => 1, 'name' => 'testProduct1'], ['item_id' => 2, 'name' => 'testProduct2']];
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => $this->_restResourcePath,
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET
|
|
],
|
|
'soap' => ['service' => $this->_soapService, 'operation' => $this->_soapService . 'Items'],
|
|
];
|
|
$item = $this->_webApiCall($serviceInfo);
|
|
$this->assertEquals($itemArr, $item, 'Items were not retrieved');
|
|
}
|
|
|
|
/**
|
|
* Test create item
|
|
*/
|
|
public function testCreate()
|
|
{
|
|
$createdItemName = 'createdItemName';
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => $this->_restResourcePath,
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST
|
|
],
|
|
'soap' => ['service' => $this->_soapService, 'operation' => $this->_soapService . 'Create'],
|
|
];
|
|
$requestData = ['name' => $createdItemName];
|
|
$item = $this->_webApiCall($serviceInfo, $requestData);
|
|
$this->assertEquals($createdItemName, $item['name'], 'Item creation failed');
|
|
}
|
|
|
|
/**
|
|
* Test create item with missing proper resources
|
|
*/
|
|
public function testCreateWithoutResources()
|
|
{
|
|
$createdItemName = 'createdItemName';
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => $this->_restResourcePath,
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST
|
|
],
|
|
'soap' => ['service' => $this->_soapService, 'operation' => $this->_soapService . 'Create'],
|
|
];
|
|
$requestData = ['name' => $createdItemName];
|
|
|
|
// getting new credentials that do not match the api resources
|
|
OauthHelper::clearApiAccessCredentials();
|
|
OauthHelper::getApiAccessCredentials([]);
|
|
try {
|
|
$this->assertUnauthorizedException($serviceInfo, $requestData);
|
|
} catch (\Exception $e) {
|
|
OauthHelper::clearApiAccessCredentials();
|
|
throw $e;
|
|
}
|
|
// to allow good credentials to be restored (this is statically stored on OauthHelper)
|
|
OauthHelper::clearApiAccessCredentials();
|
|
}
|
|
|
|
/**
|
|
* Test update item
|
|
*/
|
|
public function testUpdate()
|
|
{
|
|
$itemId = 1;
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => $this->_restResourcePath . $itemId,
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
|
|
],
|
|
'soap' => ['service' => $this->_soapService, 'operation' => $this->_soapService . 'Update'],
|
|
];
|
|
$requestData = ['entityItem' => ['itemId' => $itemId, 'name' => 'testName']];
|
|
$item = $this->_webApiCall($serviceInfo, $requestData);
|
|
$this->assertEquals('Updated' . $requestData['entityItem']['name'], $item['name'], 'Item update failed');
|
|
}
|
|
|
|
/**
|
|
* Negative Test: Invoking non-existent delete api which is only available in V2
|
|
*/
|
|
public function testDelete()
|
|
{
|
|
$itemId = 1;
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => $this->_restResourcePath . $itemId,
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_DELETE,
|
|
],
|
|
'soap' => ['service' => $this->_soapService, 'operation' => $this->_soapService . 'Delete'],
|
|
];
|
|
$requestData = ['itemId' => $itemId, 'name' => 'testName'];
|
|
$this->_assertNoRouteOrOperationException($serviceInfo, $requestData);
|
|
}
|
|
|
|
public function testOverwritten()
|
|
{
|
|
$this->_markTestAsRestOnly();
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => $this->_restResourcePath . 'overwritten',
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
|
|
],
|
|
];
|
|
$item = $this->_webApiCall($serviceInfo, []);
|
|
$this->assertEquals(['item_id' => -55, 'name' => 'testProduct1'], $item);
|
|
}
|
|
|
|
public function testDefaulted()
|
|
{
|
|
$this->_markTestAsRestOnly();
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => $this->_restResourcePath . 'testOptionalParam',
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
|
|
],
|
|
];
|
|
$item = $this->_webApiCall($serviceInfo, []);
|
|
$this->assertEquals(['item_id' => 3, 'name' => 'Default Name'], $item);
|
|
}
|
|
|
|
public function testDefaultedWithValue()
|
|
{
|
|
$this->_markTestAsRestOnly();
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => $this->_restResourcePath . 'testOptionalParam',
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
|
|
],
|
|
];
|
|
$item = $this->_webApiCall($serviceInfo, ['name' => 'Ms. LaGrange']);
|
|
$this->assertEquals(['item_id' => 3, 'name' => 'Ms. LaGrange'], $item);
|
|
}
|
|
}
|