123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319 |
- <?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 RuleRepositoryTest extends WebapiAbstract
- {
- const SERVICE_NAME = 'salesRuleRuleRepositoryV1';
- const RESOURCE_PATH = '/V1/salesRules';
- const SERVICE_VERSION = "V1";
- /**
- * @var \Magento\Framework\ObjectManagerInterface
- */
- private $objectManager;
- protected function setUp()
- {
- $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
- }
- protected function getSalesRuleData()
- {
- $data = [
- 'name' => '40% Off on Large Orders',
- 'store_labels' => [
- [
- 'store_id' => 0,
- 'store_label' => 'TestRule_Label',
- ],
- [
- 'store_id' => 1,
- 'store_label' => 'TestRule_Label_default',
- ],
- ],
- 'description' => 'Test sales rule',
- 'website_ids' => [1],
- 'customer_group_ids' => [0, 1, 3],
- 'uses_per_customer' => 2,
- 'is_active' => true,
- 'condition' => [
- 'condition_type' => \Magento\SalesRule\Model\Rule\Condition\Combine::class,
- 'conditions' => [
- [
- 'condition_type' => \Magento\SalesRule\Model\Rule\Condition\Address::class,
- 'operator' => '>',
- 'attribute_name' => 'base_subtotal',
- 'value' => 800
- ]
- ],
- 'aggregator_type' => 'all',
- 'operator' => null,
- 'value' => null,
- ],
- 'action_condition' => [
- 'condition_type' => \Magento\SalesRule\Model\Rule\Condition\Product\Combine::class,
- "conditions" => [
- [
- 'condition_type' => \Magento\SalesRule\Model\Rule\Condition\Product::class,
- 'operator' => '==',
- 'attribute_name' => 'attribute_set_id',
- 'value' => '4',
- ]
- ],
- 'aggregator_type' => 'all',
- 'operator' => null,
- 'value' => null,
- ],
- 'stop_rules_processing' => true,
- 'is_advanced' => true,
- 'sort_order' => 2,
- 'simple_action' => 'cart_fixed',
- 'discount_amount' => 40,
- 'discount_qty' => 2,
- 'discount_step' => 0,
- 'apply_to_shipping' => false,
- 'times_used' => 1,
- 'is_rss' => true,
- 'coupon_type' => \Magento\SalesRule\Api\Data\RuleInterface::COUPON_TYPE_SPECIFIC_COUPON,
- 'use_auto_generation' => false,
- 'uses_per_coupon' => 0,
- 'simple_free_shipping' => 0,
- ];
- return $data;
- }
- public function testCrud()
- {
- //test create
- $inputData = $this->getSalesRuleData();
- $result = $this->createRule($inputData);
- $ruleId = $result['rule_id'];
- $this->assertArrayHasKey('rule_id', $result);
- $this->assertEquals($ruleId, $result['rule_id']);
- unset($result['rule_id']);
- unset($result['extension_attributes']);
- $this->assertEquals($inputData, $result);
- //test getList
- $result = $this->verifyGetList($ruleId);
- unset($result['rule_id']);
- unset($result['extension_attributes']);
- $this->assertEquals($inputData, $result);
- //test update
- $inputData['times_used'] = 2;
- $inputData['customer_group_ids'] = [0, 1, 3];
- $inputData['discount_amount'] = 30;
- $result = $this->updateRule($ruleId, $inputData);
- unset($result['rule_id']);
- unset($result['extension_attributes']);
- $this->assertEquals($inputData, $result);
- //test get
- $result = $this->getRule($ruleId);
- unset($result['rule_id']);
- unset($result['extension_attributes']);
- $this->assertEquals($inputData, $result);
- //test delete
- $this->assertEquals(true, $this->deleteRule($ruleId));
- }
- public function verifyGetList($ruleId)
- {
- $searchCriteria = [
- 'searchCriteria' => [
- 'filter_groups' => [
- [
- 'filters' => [
- [
- 'field' => 'rule_id',
- 'value' => $ruleId,
- 'condition_type' => 'eq',
- ],
- ],
- ],
- ],
- 'current_page' => 1,
- 'page_size' => 2,
- ],
- ];
- $serviceInfo = [
- 'rest' => [
- 'resourcePath' => self::RESOURCE_PATH . '/search' . '?' . http_build_query($searchCriteria),
- 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
- ],
- 'soap' => [
- 'service' => self::SERVICE_NAME,
- 'serviceVersion' => self::SERVICE_VERSION,
- 'operation' => self::SERVICE_NAME . 'GetList',
- ],
- ];
- $response = $this->_webApiCall($serviceInfo, $searchCriteria);
- $this->assertArrayHasKey('search_criteria', $response);
- $this->assertArrayHasKey('total_count', $response);
- $this->assertArrayHasKey('items', $response);
- $this->assertEquals($searchCriteria['searchCriteria'], $response['search_criteria']);
- $this->assertTrue($response['total_count'] > 0);
- $this->assertTrue(count($response['items']) > 0);
- $this->assertNotNull($response['items'][0]['rule_id']);
- $this->assertEquals($ruleId, $response['items'][0]['rule_id']);
- return $response['items'][0];
- }
- /**
- * @magentoApiDataFixture Magento/SalesRule/_files/rules_advanced.php
- */
- public function testGetListWithMultipleFiltersAndSorting()
- {
- /** @var $searchCriteriaBuilder \Magento\Framework\Api\SearchCriteriaBuilder */
- $searchCriteriaBuilder = $this->objectManager->create(
- \Magento\Framework\Api\SearchCriteriaBuilder::class
- );
- /** @var $filterBuilder \Magento\Framework\Api\FilterBuilder */
- $filterBuilder = $this->objectManager->create(
- \Magento\Framework\Api\FilterBuilder::class
- );
- /** @var \Magento\Framework\Api\SortOrderBuilder $sortOrderBuilder */
- $sortOrderBuilder = $this->objectManager->create(
- \Magento\Framework\Api\SortOrderBuilder::class
- );
- $filter1 = $filterBuilder->setField('is_rss')
- ->setValue(1)
- ->setConditionType('eq')
- ->create();
- $filter2 = $filterBuilder->setField('name')
- ->setValue('#4')
- ->setConditionType('eq')
- ->create();
- $filter3 = $filterBuilder->setField('uses_per_coupon')
- ->setValue(1)
- ->setConditionType('gt')
- ->create();
- $sortOrder = $sortOrderBuilder->setField('name')
- ->setDirection('ASC')
- ->create();
- $searchCriteriaBuilder->addFilters([$filter1, $filter2]);
- $searchCriteriaBuilder->addFilters([$filter3]);
- $searchCriteriaBuilder->addSortOrder($sortOrder);
- $searchData = $searchCriteriaBuilder->create()->__toArray();
- $requestData = ['searchCriteria' => $searchData];
- $serviceInfo = [
- 'rest' => [
- 'resourcePath' => self::RESOURCE_PATH . '/search?' . http_build_query($requestData),
- 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
- ],
- 'soap' => [
- 'service' => self::SERVICE_NAME,
- 'serviceVersion' => self::SERVICE_VERSION,
- 'operation' => self::SERVICE_NAME . 'GetList',
- ],
- ];
- $result = $this->_webApiCall($serviceInfo, $requestData);
- $this->assertArrayHasKey('items', $result);
- $this->assertArrayHasKey('search_criteria', $result);
- $this->assertCount(2, $result['items']);
- $this->assertEquals('#1', $result['items'][0]['name']);
- $this->assertEquals('#2', $result['items'][1]['name']);
- $this->assertEquals($searchData, $result['search_criteria']);
- }
- /**
- * Create Sales rule
- *
- * @param $rule
- * @return array
- */
- protected function createRule($rule)
- {
- $serviceInfo = [
- 'rest' => [
- 'resourcePath' => self::RESOURCE_PATH,
- 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST
- ],
- 'soap' => [
- 'service' => self::SERVICE_NAME,
- 'serviceVersion' => self::SERVICE_VERSION,
- 'operation' => self::SERVICE_NAME . 'Save',
- ],
- ];
- $requestData = ['rule' => $rule];
- return $this->_webApiCall($serviceInfo, $requestData);
- }
- /**
- * @param int $id
- * @return bool
- * @throws \Exception
- */
- protected function deleteRule($id)
- {
- $serviceInfo = [
- 'rest' => [
- 'resourcePath' => self::RESOURCE_PATH . '/' . $id,
- 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_DELETE,
- ],
- 'soap' => [
- 'service' => self::SERVICE_NAME,
- 'serviceVersion' => self::SERVICE_VERSION,
- 'operation' => self::SERVICE_NAME . 'DeleteById',
- ],
- ];
- return $this->_webApiCall($serviceInfo, ['rule_id' => $id]);
- }
- protected function updateRule($id, $data)
- {
- $serviceInfo = [
- 'rest' => [
- 'resourcePath' => self::RESOURCE_PATH . '/' . $id,
- 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
- ],
- 'soap' => [
- 'service' => self::SERVICE_NAME,
- 'serviceVersion' => self::SERVICE_VERSION,
- 'operation' => self::SERVICE_NAME . 'Save',
- ],
- ];
- $data['rule_id'] = $id;
- return $this->_webApiCall($serviceInfo, ['rule_id' => $id, 'rule' => $data]);
- }
- protected function getRule($id)
- {
- $serviceInfo = [
- 'rest' => [
- 'resourcePath' => self::RESOURCE_PATH . '/' . $id,
- 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
- ],
- 'soap' => [
- 'service' => self::SERVICE_NAME,
- 'serviceVersion' => self::SERVICE_VERSION,
- 'operation' => self::SERVICE_NAME . 'GetById',
- ],
- ];
- return $this->_webApiCall($serviceInfo, ['rule_id' => $id]);
- }
- }
|