222 lines
6.6 KiB
PHP
Executable File
222 lines
6.6 KiB
PHP
Executable File
<?php
|
|
/**
|
|
*
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
namespace Magento\SalesRule\Api;
|
|
|
|
use Magento\TestFramework\Helper\Bootstrap;
|
|
use Magento\TestFramework\TestCase\WebapiAbstract;
|
|
|
|
class CouponManagementTest extends WebapiAbstract
|
|
{
|
|
const SERVICE_NAME = 'salesRuleCouponManagementV1';
|
|
const RESOURCE_PATH = '/V1/coupons';
|
|
const SERVICE_VERSION = "V1";
|
|
|
|
const SERVICE_NAME_COUPON = 'salesRuleCouponRepositoryV1';
|
|
const RESOURCE_PATH_COUPON = '/V1/coupons';
|
|
const SERVICE_VERSION_COUPON = "V1";
|
|
|
|
/**
|
|
* @param int $count
|
|
* @param int $length
|
|
* @param string $format
|
|
* @param string $regex
|
|
* @dataProvider dataProviderForTestGenerate
|
|
* @magentoApiDataFixture Magento/SalesRule/_files/rules_autogeneration.php
|
|
*/
|
|
public function testManagement($count, $length, $format, $regex)
|
|
{
|
|
/** @var $registry \Magento\Framework\Registry */
|
|
$registry = Bootstrap::getObjectManager()->get(\Magento\Framework\Registry::class);
|
|
|
|
/** @var $salesRule \Magento\SalesRule\Model\Rule */
|
|
$salesRule = $registry->registry('_fixture/Magento_SalesRule_Api_RuleRepository');
|
|
$ruleId = $salesRule->getRuleId();
|
|
|
|
$result = $this->generate($ruleId, $count, $length, $format);
|
|
$this->assertIsArray($result);
|
|
$this->assertTrue(count($result) == $count);
|
|
foreach ($result as $code) {
|
|
$this->assertMatchesRegularExpression($regex, $code);
|
|
}
|
|
|
|
$couponList = $this->getList($ruleId);
|
|
$couponIds = [];
|
|
$couponCodes = [];
|
|
$cnt = 0;
|
|
if (is_array($couponList)) {
|
|
foreach ($couponList as $coupon) {
|
|
if ($cnt < $count / 2) {
|
|
$couponIds[] = $coupon['coupon_id'];
|
|
}
|
|
$cnt++;
|
|
}
|
|
$cnt=0;
|
|
foreach ($couponList as $coupon) {
|
|
if ($cnt >= $count / 2) {
|
|
$couponCodes[] = $coupon['code'];
|
|
}
|
|
$cnt++;
|
|
}
|
|
}
|
|
|
|
$couponMassDeleteResult = $this->deleteCouponsByCodes($couponCodes);
|
|
$this->assertEmpty($couponMassDeleteResult['failed_items']);
|
|
|
|
$couponList = $this->getList($ruleId);
|
|
$this->assertTrue(count($couponList) == $cnt / 2);
|
|
|
|
$couponMassDeleteResult = $this->deleteCouponsById($couponIds);
|
|
$this->assertEmpty($couponMassDeleteResult['failed_items']);
|
|
|
|
$couponList = $this->getList($ruleId);
|
|
$this->assertTrue(count($couponList) == 0);
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function dataProviderForTestGenerate()
|
|
{
|
|
return [
|
|
[
|
|
10,
|
|
12,
|
|
'alphanum',
|
|
'/[a-zA-Z0-9]{12}/',
|
|
],
|
|
[
|
|
10,
|
|
10,
|
|
'num',
|
|
'/[0-9]{10}/',
|
|
],
|
|
[
|
|
10,
|
|
8,
|
|
'alpha',
|
|
'/[a-zA-Z]{8}/',
|
|
],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @param int $ruleId
|
|
* @param int $count
|
|
* @param int $length
|
|
* @param string $format
|
|
* @return array
|
|
*/
|
|
public function generate($ruleId, $count, $length, $format)
|
|
{
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => self::RESOURCE_PATH . "/generate",
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST
|
|
],
|
|
'soap' => [
|
|
'service' => self::SERVICE_NAME,
|
|
'serviceVersion' => self::SERVICE_VERSION,
|
|
'operation' => self::SERVICE_NAME . 'generate',
|
|
],
|
|
];
|
|
$requestData = [ "couponSpec"=>
|
|
[
|
|
"rule_id" => $ruleId,
|
|
"quantity" => $count,
|
|
"length" => $length,
|
|
"format" => $format
|
|
]
|
|
];
|
|
$result = $this->_webApiCall($serviceInfo, $requestData);
|
|
|
|
return $result;
|
|
}
|
|
|
|
/**
|
|
* @param int $ruleId
|
|
* @return array
|
|
*/
|
|
protected function getList($ruleId)
|
|
{
|
|
$searchCriteria = [
|
|
'searchCriteria' => [
|
|
'filter_groups' => [
|
|
[
|
|
'filters' => [
|
|
[
|
|
'field' => 'rule_id',
|
|
'value' => $ruleId,
|
|
'condition_type' => 'eq',
|
|
],
|
|
],
|
|
],
|
|
],
|
|
'current_page' => 1,
|
|
'page_size' => 300,
|
|
],
|
|
];
|
|
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => self::RESOURCE_PATH_COUPON . '/search' . '?' . http_build_query($searchCriteria),
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
|
|
],
|
|
'soap' => [
|
|
'service' => self::SERVICE_NAME_COUPON,
|
|
'serviceVersion' => self::SERVICE_VERSION_COUPON,
|
|
'operation' => self::SERVICE_NAME_COUPON . 'GetList',
|
|
],
|
|
];
|
|
|
|
$response = $this->_webApiCall($serviceInfo, $searchCriteria);
|
|
|
|
return $response['items'];
|
|
}
|
|
|
|
/**
|
|
* @param array $couponArray
|
|
* @return array
|
|
*/
|
|
protected function deleteCouponsById($couponArray)
|
|
{
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => self::RESOURCE_PATH . '/deleteByIds' ,
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
|
|
],
|
|
'soap' => [
|
|
'service' => self::SERVICE_NAME,
|
|
'serviceVersion' => self::SERVICE_VERSION,
|
|
'operation' => self::SERVICE_NAME . 'deleteByIds',
|
|
],
|
|
];
|
|
|
|
return $this->_webApiCall($serviceInfo, ['ids' => $couponArray]);
|
|
}
|
|
|
|
/**
|
|
* @param array $couponArray
|
|
* @return array
|
|
*/
|
|
protected function deleteCouponsByCodes($couponArray)
|
|
{
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => self::RESOURCE_PATH . '/deleteByCodes' ,
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
|
|
],
|
|
'soap' => [
|
|
'service' => self::SERVICE_NAME,
|
|
'serviceVersion' => self::SERVICE_VERSION,
|
|
'operation' => self::SERVICE_NAME . 'deleteByCodes',
|
|
],
|
|
];
|
|
|
|
return $this->_webApiCall($serviceInfo, ['codes' => $couponArray]);
|
|
}
|
|
}
|