public function testToDataModel() { $array = ['rule_id' => '1', 'name' => 'testrule', 'is_active' => '1', 'conditions_serialized' => 'a:7:{s:4:"type";s:46:"Magento\\SalesRule\\Model\\Rule\\Condition\\Combine";s:9:"attribute";N;' . 's:8:"operator";N;s:5:"value";s:1:"1";s:18:"is_value_processed";N;s:10:"aggregator";s:3:"all";' . 's:10:"conditions";a:1:{i:0;a:5:{s:4:"type";s:46:"Magento\\SalesRule\\Model\\Rule\\Condition\\Address";' . 's:9:"attribute";s:13:"base_subtotal";s:8:"operator";s:2:">=";s:5:"value";s:3:"100";' . 's:18:"is_value_processed";b:0;}}}', 'actions_serialized' => 'a:7:{s:4:"type";s:54:"Magento\\SalesRule\\Model\\Rule\\Condition\\Product\\Combine";s:9:"attribute";N;' . 's:8:"operator";N;s:5:"value";s:1:"1";s:18:"is_value_processed";N;s:10:"aggregator";s:3:"all";' . 's:10:"conditions";a:1:{i:0;a:5:{s:4:"type";s:46:"Magento\\SalesRule\\Model\\Rule\\Condition\\Product";' . 's:9:"attribute";s:16:"attribute_set_id";s:8:"operator";s:2:"==";s:5:"value";s:1:"4";' . 's:18:"is_value_processed";b:0;}}}', 'coupon_type' => '1', 'coupon_code' => '', 'store_labels' => [0 => 'TestRule', 1 => 'TestRuleForDefaultStore']]; $dataModel = $this->getMockBuilder('\\Magento\\SalesRule\\Model\\Data\\Rule')->disableOriginalConstructor()->setMethods(['create', 'getStoreLabels', 'setStoreLabels', 'getCouponType', 'setCouponType'])->getMock(); $dataLabel = $this->getMockBuilder('\\Magento\\SalesRule\\Api\\Data\\RuleLabel')->setMethods(['setStoreId', 'setStoreLabel', 'setStoreLabels'])->disableOriginalConstructor()->getMock(); $dataCondition = $this->getMockBuilder('\\Magento\\SalesRule\\Model\\Data\\Condition')->setMethods(['setData'])->disableOriginalConstructor()->getMock(); $this->ruleLabelFactory->expects($this->any())->method('create')->willReturn($dataLabel); $this->conditionDataFactory->expects($this->any())->method('create')->willReturn($dataCondition); $this->ruleDataFactory->expects($this->any())->method('create')->willReturn($dataModel); $this->salesRule->expects($this->any())->method('getData')->willReturn($array); $this->salesRule->expects($this->once())->method('getConditionsSerialized')->willReturn($array['conditions_serialized']); $dataModel->expects($this->atLeastOnce())->method('getStoreLabels')->willReturn($array['store_labels']); $dataModel->expects($this->atLeastOnce())->method('setStoreLabels'); $dataModel->expects($this->atLeastOnce())->method('getCouponType')->willReturn(\Magento\SalesRule\Model\Rule::COUPON_TYPE_NO_COUPON); $dataModel->expects($this->atLeastOnce())->method('setCouponType'); $return = $this->model->toDataModel($this->salesRule); $this->assertSame($dataModel, $return); }
/** * {@inheritdoc} */ public function getList(SearchCriteriaInterface $searchCriteria) { /** @var \Magento\SalesRule\Model\ResourceModel\Rule\Collection $collection */ $collection = $this->ruleCollectionFactory->create(); $ruleInterfaceName = 'Magento\\SalesRule\\Api\\Data\\RuleInterface'; $this->extensionAttributesJoinProcessor->process($collection, $ruleInterfaceName); $collection->addWebsitesToResult(); //Add filters from root filter group to the collection /** @var FilterGroup $group */ foreach ($searchCriteria->getFilterGroups() as $group) { $this->addFilterGroupToCollection($group, $collection); } $sortOrders = $searchCriteria->getSortOrders(); if ($sortOrders === null) { $sortOrders = []; } /** @var \Magento\Framework\Api\SortOrder $sortOrder */ foreach ($sortOrders as $sortOrder) { $field = $sortOrder->getField(); $collection->addOrder($field, $sortOrder->getDirection() == SortOrder::SORT_ASC ? 'ASC' : 'DESC'); } $collection->setCurPage($searchCriteria->getCurrentPage()); $collection->setPageSize($searchCriteria->getPageSize()); $collection->load(); $rules = []; /** @var \Magento\SalesRule\Model\Rule $ruleModel */ foreach ($collection->getItems() as $ruleModel) { $ruleModel->getCustomerGroupIds(); $ruleModel->getStoreLabels(); $rules[] = $this->toDataModelConverter->toDataModel($ruleModel); } $searchResults = $this->searchResultFactory->create(); $searchResults->setSearchCriteria($searchCriteria); $searchResults->setItems($rules); $searchResults->setTotalCount($collection->getSize()); return $searchResults; }