This commit is contained in:
2026-09-15 10:26:34 +08:00
commit ecf36afa56
10493 changed files with 1404888 additions and 0 deletions
@@ -0,0 +1,78 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\TestModule1\Controller;
use Magento\Framework\App\RequestInterface;
use Magento\Framework\Stdlib\Cookie\CookieMetadataFactory;
use Magento\Framework\Stdlib\Cookie\PhpCookieManager;
/**
* Controller for testing the CookieManager.
*
*/
abstract class CookieTester implements \Magento\Framework\App\ActionInterface
{
/** @var PhpCookieManager */
protected $cookieManager;
/** @var CookieMetadataFactory */
protected $cookieMetadataFactory;
/**
* @var \Magento\Framework\App\ResponseInterface
*/
protected $_response;
/**
* @var
*/
protected $request;
/**
* @param \Magento\Framework\App\Action\Context $context
* @param PhpCookieManager $cookieManager
* @param CookieMetadataFactory $cookieMetadataFactory
*/
public function __construct(
\Magento\Framework\App\Action\Context $context,
PhpCookieManager $cookieManager,
CookieMetadataFactory $cookieMetadataFactory
) {
$this->cookieManager = $cookieManager;
$this->cookieMetadataFactory = $cookieMetadataFactory;
$this->_response = $context->getResponse();
$this->request = $context->getRequest();
}
/**
* Retrieve cookie metadata factory
*/
protected function getCookieMetadataFactory()
{
return $this->cookieMetadataFactory;
}
/**
* Retrieve cookie metadata factory
*/
protected function getCookieManager()
{
return $this->cookieManager;
}
/**
* Dispatch request
*
* @param RequestInterface $request
* @return \Magento\Framework\App\ResponseInterface
*/
public function dispatch(RequestInterface $request)
{
$this->request = $request;
$result = $this->execute();
return $result ? $result : $this->_response;
}
}
@@ -0,0 +1,25 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\TestModule1\Controller\CookieTester;
use \Magento\Framework\App\RequestInterface;
/**
* Controller to test deletion of a cookie
*/
class DeleteCookie extends \Magento\TestModule1\Controller\CookieTester
{
/**
*
* @return \Magento\Framework\App\ResponseInterface
*/
public function execute()
{
$cookieName = $this->request->getParam('cookie_name');
$this->getCookieManager()->deleteCookie($cookieName);
return $this->_response;
}
}
@@ -0,0 +1,53 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\TestModule1\Controller\CookieTester;
use \Magento\Framework\App\RequestInterface;
/**
*/
class SetPublicCookie extends \Magento\TestModule1\Controller\CookieTester
{
/**
* Sets a public cookie with data from url parameters
*
* @return \Magento\Framework\App\ResponseInterface
*/
public function execute()
{
$publicCookieMetadata = $this->getCookieMetadataFactory()->createPublicCookieMetadata();
$cookieDomain = $this->request->getParam('cookie_domain');
if ($cookieDomain !== null) {
$publicCookieMetadata->setDomain($cookieDomain);
}
$cookiePath = $this->request->getParam('cookie_path');
if ($cookiePath !== null) {
$publicCookieMetadata->setPath($cookiePath);
}
$cookieDuration = $this->request->getParam('cookie_duration');
if ($cookieDuration !== null) {
$publicCookieMetadata->setDuration($cookieDuration);
}
$httpOnly = $this->request->getParam('cookie_httponly');
if ($httpOnly !== null) {
$publicCookieMetadata->setHttpOnly($httpOnly);
}
$secure = $this->request->getParam('cookie_secure');
if ($secure !== null) {
$publicCookieMetadata->setSecure($secure);
}
$cookieName = $this->request->getParam('cookie_name');
$cookieValue = $this->request->getParam('cookie_value');
$this->getCookieManager()->setPublicCookie($cookieName, $cookieValue, $publicCookieMetadata);
return $this->_response;
}
}
@@ -0,0 +1,37 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\TestModule1\Controller\CookieTester;
use \Magento\Framework\App\RequestInterface;
/**
*/
class SetSensitiveCookie extends \Magento\TestModule1\Controller\CookieTester
{
/**
* Sets a sensitive cookie with data from url parameters
*
* @return \Magento\Framework\App\ResponseInterface
*/
public function execute()
{
$sensitiveCookieMetadata = $this->getCookieMetadataFactory()->createSensitiveCookieMetadata();
$cookieDomain = $this->request->getParam('cookie_domain');
if ($cookieDomain !== null) {
$sensitiveCookieMetadata->setDomain($cookieDomain);
}
$cookiePath = $this->request->getParam('cookie_domain');
if ($cookiePath !== null) {
$sensitiveCookieMetadata->setPath($cookiePath);
}
$cookieName = $this->request->getParam('cookie_name');
$cookieValue = $this->request->getParam('cookie_value');
$this->getCookieManager()->setSensitiveCookie($cookieName, $cookieValue, $sensitiveCookieMetadata);
return $this->_response;
}
}
@@ -0,0 +1,106 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\TestModule1\Service\V1;
use Magento\TestModuleMSC\Model\Data\CustomAttributeDataObjectFactory;
use Magento\TestModule1\Service\V1\Entity\Item;
use Magento\TestModule1\Service\V1\Entity\ItemFactory;
class AllSoapAndRest implements \Magento\TestModule1\Service\V1\AllSoapAndRestInterface
{
/**
* @var ItemFactory
*/
protected $itemFactory;
/**
* @var CustomAttributeDataObjectFactory
*/
protected $customAttributeDataObjectFactory;
/**
* @param ItemFactory $itemFactory
* @param CustomAttributeDataObjectFactory $customAttributeNestedDataObjectFactory
*/
public function __construct(
ItemFactory $itemFactory,
CustomAttributeDataObjectFactory $customAttributeNestedDataObjectFactory
) {
$this->itemFactory = $itemFactory;
$this->customAttributeDataObjectFactory = $customAttributeNestedDataObjectFactory;
}
/**
* {@inheritdoc}
*/
public function item($itemId)
{
return $this->itemFactory->create()->setItemId($itemId)->setName('testProduct1');
}
/**
* {@inheritdoc}
*/
public function items()
{
$result1 = $this->itemFactory->create()->setItemId(1)->setName('testProduct1');
$result2 = $this->itemFactory->create()->setItemId(2)->setName('testProduct2');
return [$result1, $result2];
}
/**
* {@inheritdoc}
*/
public function create($name)
{
return $this->itemFactory->create()->setItemId(rand())->setName($name);
}
/**
* {@inheritdoc}
*/
public function update(Item $entityItem)
{
return $this->itemFactory->create()->setItemId($entityItem->getItemId())
->setName('Updated' . $entityItem->getName());
}
public function testOptionalParam($name = null)
{
if ($name === null) {
return $this->itemFactory->create()->setItemId(3)->setName('No Name');
} else {
return $this->itemFactory->create()->setItemId(3)->setName($name);
}
}
/**
* {@inheritdoc}
*/
public function itemAnyType(Item $item)
{
return $item;
}
/**
* {@inheritdoc}
*/
public function getPreconfiguredItem()
{
$customAttributeDataObject = $this->customAttributeDataObjectFactory->create()
->setName('nameValue')
->setCustomAttribute('custom_attribute_int', 1);
$item = $this->itemFactory->create()
->setItemId(1)
->setName('testProductAnyType')
->setCustomAttribute('custom_attribute_data_object', $customAttributeDataObject)
->setCustomAttribute('custom_attribute_string', 'someStringValue');
return $item;
}
}
@@ -0,0 +1,51 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\TestModule1\Service\V1;
use Magento\TestModule1\Service\V1\Entity\Item;
interface AllSoapAndRestInterface
{
/**
* @param int $itemId
* @return \Magento\TestModule1\Service\V1\Entity\Item
*/
public function item($itemId);
/**
* @param string $name
* @return \Magento\TestModule1\Service\V1\Entity\Item
*/
public function create($name);
/**
* @param \Magento\TestModule1\Service\V1\Entity\Item $entityItem
* @return \Magento\TestModule1\Service\V1\Entity\Item
*/
public function update(Item $entityItem);
/**
* @return \Magento\TestModule1\Service\V1\Entity\Item[]
*/
public function items();
/**
* @param string $name
* @return \Magento\TestModule1\Service\V1\Entity\Item
*/
public function testOptionalParam($name = null);
/**
* @param \Magento\TestModule1\Service\V1\Entity\Item $entityItem
* @return \Magento\TestModule1\Service\V1\Entity\Item
*/
public function itemAnyType(Item $entityItem);
/**
* @return \Magento\TestModule1\Service\V1\Entity\Item
*/
public function getPreconfiguredItem();
}
@@ -0,0 +1,64 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\TestModule1\Service\V1\Entity;
class Item extends \Magento\Framework\Api\AbstractExtensibleObject
{
/**#@+
* Custom attribute code constants
*/
const CUSTOM_ATTRIBUTE_1 = 'custom_attribute1';
const CUSTOM_ATTRIBUTE_2 = 'custom_attribute2';
const CUSTOM_ATTRIBUTE_3 = 'custom_attribute3';
/**#@-*/
/**
* @return int
*/
public function getItemId()
{
return $this->_data['item_id'];
}
/**
* @param int $itemId
* @return $this
*/
public function setItemId($itemId)
{
return $this->setData('item_id', $itemId);
}
/**
* @return string
*/
public function getName()
{
return $this->_data['name'];
}
/**
* @param string $name
* @return $this
*/
public function setName($name)
{
return $this->setData('name', $name);
}
/**
* Template method used to configure the attribute codes for the custom attributes
*
* @return string[]
*/
protected function getCustomAttributesCodes()
{
return array_merge(
parent::getCustomAttributesCodes(),
[self::CUSTOM_ATTRIBUTE_1, self::CUSTOM_ATTRIBUTE_2, self::CUSTOM_ATTRIBUTE_3]
);
}
}
@@ -0,0 +1,86 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\TestModule1\Service\V2;
use Magento\TestModule1\Service\V2\Entity\Item;
use Magento\TestModule1\Service\V2\Entity\ItemFactory;
class AllSoapAndRest implements \Magento\TestModule1\Service\V2\AllSoapAndRestInterface
{
/**
* @var ItemFactory
*/
protected $itemFactory;
/**
* @param ItemFactory $itemFactory
*/
public function __construct(ItemFactory $itemFactory)
{
$this->itemFactory = $itemFactory;
}
/**
* {@inheritdoc}
*/
public function item($id)
{
return $this->itemFactory->create()->setId($id)->setName('testProduct1')->setPrice('1');
}
/**
* {@inheritdoc}
*/
public function items($filters = [], $sortOrder = 'ASC')
{
$result = [];
$firstItem = $this->itemFactory->create()->setId(1)->setName('testProduct1')->setPrice('1');
$secondItem = $this->itemFactory->create()->setId(2)->setName('testProduct2')->setPrice('2');
/** Simple filtration implementation */
if (!empty($filters)) {
/** @var \Magento\Framework\Api\Filter $filter */
foreach ($filters as $filter) {
if ('id' == $filter->getField() && $filter->getValue() == 1) {
$result[] = $firstItem;
} elseif ('id' == $filter->getField() && $filter->getValue() == 2) {
$result[] = $secondItem;
}
}
} else {
/** No filter is specified. */
$result = [$firstItem, $secondItem];
}
return $result;
}
/**
* {@inheritdoc}
*/
public function create($name)
{
return $this->itemFactory->create()->setId(rand())->setName($name)->setPrice('10');
}
/**
* {@inheritdoc}
*/
public function update(Item $entityItem)
{
return $this->itemFactory->create()
->setId($entityItem->getId())
->setName('Updated' . $entityItem->getName())
->setPrice('5');
}
/**
* {@inheritdoc}
*/
public function delete($id)
{
return $this->itemFactory->create()->setId($id)->setName('testProduct1')->setPrice('1');
}
}
@@ -0,0 +1,52 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\TestModule1\Service\V2;
use Magento\TestModule1\Service\V2\Entity\Item;
interface AllSoapAndRestInterface
{
/**
* Get item.
*
* @param int $id
* @return \Magento\TestModule1\Service\V2\Entity\Item
*/
public function item($id);
/**
* Create item.
*
* @param string $name
* @return \Magento\TestModule1\Service\V2\Entity\Item
*/
public function create($name);
/**
* Update item.
*
* @param \Magento\TestModule1\Service\V2\Entity\Item $entityItem
* @return \Magento\TestModule1\Service\V2\Entity\Item
*/
public function update(Item $entityItem);
/**
* Retrieve a list of items.
*
* @param \Magento\Framework\Api\Filter[] $filters
* @param string $sortOrder
* @return \Magento\TestModule1\Service\V2\Entity\Item[]
*/
public function items($filters = [], $sortOrder = 'ASC');
/**
* Delete an item.
*
* @param int $id
* @return \Magento\TestModule1\Service\V2\Entity\Item
*/
public function delete($id);
}
@@ -0,0 +1,60 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\TestModule1\Service\V2\Entity;
class Item extends \Magento\Framework\Api\AbstractExtensibleObject
{
/**
* @return int
*/
public function getId()
{
return $this->_data['id'];
}
/**
* @param int $id
* @return $this
*/
public function setId($id)
{
return $this->setData('id', $id);
}
/**
* @return string
*/
public function getName()
{
return $this->_data['name'];
}
/**
* @param string $name
* @return $this
*/
public function setName($name)
{
return $this->setData('name', $name);
}
/**
* @return string
*/
public function getPrice()
{
return $this->_data['price'];
}
/**
* @param string $price
* @return $this
*/
public function setPrice($price)
{
return $this->setData('price', $price);
}
}
@@ -0,0 +1,20 @@
<?xml version="1.0"?>
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Acl/etc/acl.xsd">
<acl>
<resources>
<resource id="Magento_Backend::admin">
<resource id="Magento_TestModule1::all" title="TestModule1" sortOrder="1">
<resource id="Magento_TestModule1::resource1" title="Resource1" sortOrder="20"/>
<resource id="Magento_TestModule1::resource2" title="Resource2" sortOrder="10"/>
<resource id="Magento_TestModule1::resource3" title="Resource3" sortOrder="30"/>
</resource>
</resource>
</resources>
</acl>
</config>
@@ -0,0 +1,16 @@
<?xml version="1.0"?>
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
<default>
<oauth>
<consumer>
<enable_integration_as_bearer>1</enable_integration_as_bearer>
</consumer>
</oauth>
</default>
</config>
@@ -0,0 +1,23 @@
<?xml version="1.0"?>
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\TestModule1\Service\V1\AllSoapAndRestInterface" type="Magento\TestModule1\Service\V1\AllSoapAndRest" />
<preference for="Magento\TestModule1\Service\V2\AllSoapAndRestInterface" type="Magento\TestModule1\Service\V2\AllSoapAndRest" />
<virtualType name="Magento\TestModule1\Service\Config\TestModule1MetadataConfig" type="Magento\Framework\Api\ExtensionAttribute\Config\MetadataConfig">
<arguments>
<argument name="attributeMetadataBuilder" xsi:type="object">Magento\TestModuleMSC\Model\Data\Eav\AttributeMetadataBuilder</argument>
<argument name="dataObjectClassName" xsi:type="string">Magento\TestModule1\Service\V1\Entity\Item</argument>
</arguments>
</virtualType>
<type name="Magento\TestModule1\Service\V1\Entity\ItemBuilder">
<arguments>
<argument name="metadataService" xsi:type="object">Magento\TestModule1\Service\Config\TestModule1MetadataConfig</argument>
</arguments>
</type>
</config>
@@ -0,0 +1,17 @@
<?xml version="1.0"?>
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Api/etc/extension_attributes.xsd">
<extension_attributes for="Magento\TestModule1\Service\V1\Entity\Item">
<attribute code="custom_attribute_data_object" type="Magento\TestModuleMSC\Model\Data\CustomAttributeDataObject" />
<attribute code="custom_attribute_string" type="string" />
</extension_attributes>
<extension_attributes for="Magento\TestModuleMSC\Model\Data\CustomAttributeDataObject">
<attribute code="custom_attribute_nested" type="Magento\TestModuleMSC\Model\Data\CustomAttributeNestedDataObject" />
<attribute code="custom_attribute_int" type="int" />
</extension_attributes>
</config>
@@ -0,0 +1,14 @@
<?xml version="1.0"?>
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
<router id="standard">
<route id="testmoduleone" frontName="testmoduleone">
<module name="Magento_TestModule1" />
</route>
</router>
</config>
@@ -0,0 +1,10 @@
<?xml version="1.0"?>
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Magento_TestModule1" />
</config>
@@ -0,0 +1,116 @@
<?xml version="1.0"?>
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Webapi:etc/webapi.xsd">
<route method="GET" url="/V1/testmodule1/overwritten">
<service class="Magento\TestModule1\Service\V1\AllSoapAndRestInterface" method="item" />
<resources>
<resource ref="Magento_TestModule1::resource1" />
</resources>
<data>
<parameter name="itemId" force="true">-55</parameter>
</data>
</route>
<route method="POST" url="/V1/testmodule1/testOptionalParam">
<service class="Magento\TestModule1\Service\V1\AllSoapAndRestInterface" method="testOptionalParam" />
<resources>
<resource ref="Magento_TestModule1::resource1" />
</resources>
<data>
<parameter name="name">Default Name</parameter>
</data>
</route>
<route method="GET" url="/V1/testmodule1/:itemId">
<service class="Magento\TestModule1\Service\V1\AllSoapAndRestInterface" method="item" />
<resources>
<resource ref="Magento_TestModule1::resource1" />
</resources>
</route>
<route method="GET" url="/V1/testmodule1">
<service class="Magento\TestModule1\Service\V1\AllSoapAndRestInterface" method="items" />
<resources>
<resource ref="Magento_TestModule1::resource2" />
</resources>
</route>
<route method="POST" url="/V1/testmodule1">
<service class="Magento\TestModule1\Service\V1\AllSoapAndRestInterface" method="create" />
<resources>
<resource ref="Magento_TestModule1::resource3" />
</resources>
</route>
<route method="PUT" url="/V1/testmodule1/:itemId">
<service class="Magento\TestModule1\Service\V1\AllSoapAndRestInterface" method="update" />
<resources>
<resource ref="Magento_TestModule1::resource1" />
<resource ref="Magento_TestModule1::resource2" />
</resources>
</route>
<route method="GET" url="/V1/testmodule1/resource1/:itemId">
<service class="Magento\TestModule1\Service\V1\AllSoapAndRestInterface" method="item" />
<resources>
<resource ref="anonymous" />
</resources>
</route>
<route method="POST" url="/V1/testmodule1/itemAnyType">
<service class="Magento\TestModule1\Service\V1\AllSoapAndRestInterface" method="itemAnyType" />
<resources>
<resource ref="Magento_TestModule1::resource1" />
<resource ref="Magento_TestModule1::resource2" />
</resources>
</route>
<route method="GET" url="/V1/testmodule1/itemPreconfigured">
<service class="Magento\TestModule1\Service\V1\AllSoapAndRestInterface" method="getPreconfiguredItem" />
<resources>
<resource ref="Magento_TestModule1::resource1" />
<resource ref="Magento_TestModule1::resource2" />
</resources>
</route>
<route method="PUT" url="/V1/testmodule1/withParam">
<service class="Magento\TestModule1\Service\V1\AllSoapAndRestInterface" method="update" />
<resources>
<resource ref="Magento_TestModule1::resource1" />
<resource ref="Magento_TestModule1::resource2" />
</resources>
<data>
<parameter name="paramId" force="true">%param_id%</parameter>
</data>
</route>
<route method="GET" url="/V2/testmodule1/:id">
<service class="Magento\TestModule1\Service\V2\AllSoapAndRestInterface" method="item" />
<resources>
<resource ref="Magento_TestModule1::resource1" />
</resources>
</route>
<route method="GET" url="/V2/testmodule1">
<service class="Magento\TestModule1\Service\V2\AllSoapAndRestInterface" method="items" />
<resources>
<resource ref="Magento_TestModule1::resource2" />
</resources>
</route>
<route method="POST" url="/V2/testmodule1">
<service class="Magento\TestModule1\Service\V2\AllSoapAndRestInterface" method="create" />
<resources>
<resource ref="Magento_TestModule1::resource3" />
</resources>
</route>
<route method="PUT" url="/V2/testmodule1/:id">
<service class="Magento\TestModule1\Service\V2\AllSoapAndRestInterface" method="update" />
<resources>
<resource ref="Magento_TestModule1::resource1" />
<resource ref="Magento_TestModule1::resource2" />
</resources>
</route>
<route method="DELETE" url="/V2/testmodule1/:id">
<service class="Magento\TestModule1\Service\V2\AllSoapAndRestInterface" method="delete" />
<resources>
<resource ref="Magento_TestModule1::resource1" />
</resources>
</route>
</routes>
@@ -0,0 +1,12 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
use Magento\Framework\Component\ComponentRegistrar;
$registrar = new ComponentRegistrar();
if ($registrar->getPath(ComponentRegistrar::MODULE, 'Magento_TestModule1') === null) {
ComponentRegistrar::register(ComponentRegistrar::MODULE, 'Magento_TestModule1', __DIR__);
}