HEX
Server: Apache
System: Linux webm019.cluster128.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64
User: petsclubcc (68997)
PHP: 5.4.45
Disabled: _dyuweyrj4,_dyuweyrj4r,dl
Upload Files
File: /home/petsclubcc/magento/vendor/magento/module-webapi/Test/Unit/Model/ServiceMetadataTest.php
<?php
/**
 * ServiceMetadata Unit tests.
 *
 * Copyright © 2016 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */

/**
 * Class implements tests for \Magento\Webapi\Model\ServiceMetadata class.
 */
namespace Magento\Webapi\Test\Unit\Model;

class ServiceMetadataTest extends \PHPUnit_Framework_TestCase
{
    /** @var \Magento\Webapi\Model\ServiceMetadata */
    protected $serviceMetadata;

    /**
     * Set up helper.
     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
     */
    protected function setUp()
    {
        $interfaceParameters = [
            'activateById' => [
                'interface' => [
                    'in' => [
                        'parameters' => [
                            'customerId' => [
                                'force' => true,
                                'value' => '%customer_id%',
                            ],
                            'requiredInputParameter' => [
                                'required' => true,
                            ],
                        ],
                    ],
                    'out' => [
                        'parameters' => [
                            'outputParameter' => [
                                'type' => 'string',
                            ],
                        ],
                    ],
                ],
            ],
        ];
        $classReflection = $this->getMock(
            'Magento\Webapi\Model\Config\ClassReflector',
            ['reflectClassMethods', 'extractClassDescription'],
            [],
            '',
            false
        );
        $classReflection->expects($this->any())
            ->method('reflectClassMethods')
            ->will($this->returnValue($interfaceParameters));
        $classReflection->expects($this->any())
            ->method('extractClassDescription')
            ->will($this->returnValue('classDescription'));

        $servicesConfig = [
            'services' => [
                'Magento\Customer\Api\AccountManagementInterface' => [
                    'V1' => [
                        'methods' => [
                            'activateById' => [
                                'resources' => [
                                    [
                                        'Magento_Customer::manage',
                                    ],
                                ],
                                'secure' => false,
                            ],
                        ],
                    ],
                ],
                'Magento\Customer\Api\CustomerRepositoryInterface' => [
                    'V1' => [
                        'methods' => [
                            'getById' => [
                                'resources' => [
                                    [
                                        'Magento_Customer::customer',
                                    ],
                                ],
                                'secure' => false,
                            ],
                        ],
                    ],
                ],
            ],
            'routes' => [
                '/V1/customers/me/activate' => [
                    'PUT' => [
                        'secure' => false,
                        'service' => [
                            'class' => 'Magento\Customer\Api\AccountManagementInterface',
                            'method' => 'activateById',
                        ],
                        'resources' => [
                            'self' => true,
                        ],
                        'parameters' => [
                            'customerId' => [
                                'force' => true,
                                'value' => '%customer_id%',
                            ],
                        ],
                    ],
                ],
                '/V1/customers/:customerId' => [
                    'GET' => [
                        'secure' => false,
                        'service' => [
                            'class' => 'Magento\Customer\Api\CustomerRepositoryInterface',
                            'method' => 'getById',
                        ],
                        'resources' => [
                            'Magento_Customer::customer' => true,
                        ],
                        'parameters' => [
                        ],
                    ],
                ],
            ]
        ];

        /**
         * @var $cacheMock \Magento\Webapi\Model\Cache\Type\Webapi
         */
        $cacheMock = $this->getMockBuilder('Magento\Webapi\Model\Cache\Type\Webapi')
            ->disableOriginalConstructor()
            ->getMock();

        /** @var $readerMock \Magento\Webapi\Model\Config\Reader */
        $readerMock = $this->getMockBuilder('Magento\Webapi\Model\Config\Reader')
            ->disableOriginalConstructor()
            ->getMock();
        $readerMock->expects($this->any())->method('read')->will($this->returnValue($servicesConfig));

        /** @var $config \Magento\Webapi\Model\Config */
        $config = new \Magento\Webapi\Model\Config($cacheMock, $readerMock);

        $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
        $typeProcessor = $objectManager->getObject('Magento\Framework\Reflection\TypeProcessor');

        /** @var $config \Magento\Webapi\Model\ServiceMetadata */
        $this->serviceMetadata = new \Magento\Webapi\Model\ServiceMetadata(
            $config,
            $cacheMock,
            $classReflection,
            $typeProcessor
        );

        parent::setUp();
    }

    /**
     * Test identifying service name including subservices using class name.
     *
     * @dataProvider serviceNameDataProvider
     */
    public function testGetServiceName($className, $version, $preserveVersion, $expected)
    {
        $actual = $this->serviceMetadata->getServiceName($className, $version, $preserveVersion);
        $this->assertEquals($expected, $actual);
    }

    /**
     * Dataprovider for testGetServiceName
     *
     * @return string
     */
    public function serviceNameDataProvider()
    {
        return [
            ['Magento\Customer\Api\AccountManagementInterface', 'V1', false, 'customerAccountManagement'],
            ['Magento\Customer\Api\AddressRepositoryInterface', 'V1', true, 'customerAddressRepositoryV1'],
        ];
    }

    /**
     * @expectedException \InvalidArgumentException
     * @dataProvider dataProviderForTestGetServiceNameInvalidName
     */
    public function testGetServiceNameInvalidName($interfaceClassName, $version)
    {
        $this->serviceMetadata->getServiceName($interfaceClassName, $version);
    }

    /**
     * Dataprovider for testGetServiceNameInvalidName
     *
     * @return string
     */
    public function dataProviderForTestGetServiceNameInvalidName()
    {
        return [
            ['BarV1Interface', 'V1'], // Missed vendor, module, 'Service'
            ['Service\\V1Interface', 'V1'], // Missed vendor and module
            ['Magento\\Foo\\Service\\BarVxInterface', 'V1'], // Version number should be a number
            ['Magento\\Foo\\Service\\BarInterface', 'V1'], // Version missed
            ['Magento\\Foo\\Service\\BarV1', 'V1'], // 'Interface' missed
            ['Foo\\Service\\BarV1Interface', 'V1'], // Module missed
            ['Foo\\BarV1Interface', 'V1'] // Module and 'Service' missed
        ];
    }

    public function testGetServiceMetadata()
    {
        $expectedResult = [
            'methods' => [
                'activateById' => [
                    'method' => 'activateById',
                    'inputRequired' => '',
                    'isSecure' => '',
                    'resources' => [['Magento_Customer::manage']],
                    'interface' => [
                        'in' => [
                            'parameters' => [
                                'customerId' => [
                                    'force' => true,
                                    'value' => '%customer_id%',
                                ],
                                'requiredInputParameter' => [
                                    'required' => true,
                                ],
                            ],
                        ],
                        'out' => [
                            'parameters' => [
                                'outputParameter' => [
                                    'type' => 'string',
                                ],
                            ],
                        ],
                    ],
                ],
            ],
            'class' => 'Magento\Customer\Api\AccountManagementInterface',
            'description' => 'classDescription',
        ];
        $result = $this->serviceMetadata->getServiceMetadata('customerAccountManagementV1');
        $this->assertEquals($expectedResult, $result);
    }

    public function testGetRouteMetadata()
    {
        $expectedResult = [
            'methods' => [
                'activateById' => [
                    'method' => 'activateById',
                    'inputRequired' => '',
                    'isSecure' => '',
                    'resources' => [['Magento_Customer::manage']],
                    'interface' => [
                        'in' => [
                            'parameters' => [
                                'customerId' => [
                                    'force' => true,
                                    'value' => '%customer_id%',
                                ],
                                'requiredInputParameter' => [
                                    'required' => true,
                                ],
                            ],
                        ],
                        'out' => [
                            'parameters' => [
                                'outputParameter' => [
                                    'type' => 'string',
                                ],
                            ],
                        ],
                    ],
                ],
            ],
            'class' => 'Magento\Customer\Api\AccountManagementInterface',
            'description' => 'classDescription',
            'routes' => [
                '/V1/customers/me/activate' => [
                    'PUT' => [
                        'method' => 'activateById',
                        'parameters' => [
                            'customerId' => [
                                'force' => true,
                                'value' => '%customer_id%'
                            ]
                        ]
                    ]
                ]
            ]
        ];
        $result = $this->serviceMetadata->getRouteMetadata('customerAccountManagementV1');
        $this->assertEquals($expectedResult, $result);
    }
}

require_once realpath(__DIR__ . '/../_files/test_interfaces.php');