public function testArrayToConditionDataModel() { $array = ['type' => 'Magento\\SalesRule\\Model\\Rule\\Condition\\Combine', 'attribute' => null, 'operator' => null, 'value' => 1, 'is_value_processed' => null, 'aggregator' => 'all', 'conditions' => [['type' => 'Magento\\SalesRule\\Model\\Rule\\Condition\\Address', 'attribute' => 'base_subtotal', 'operator' => '>=', 'value' => 100, 'is_value_processed' => null], ['type' => 'Magento\\SalesRule\\Model\\Rule\\Condition\\Address', 'attribute' => 'total_qty', 'operator' => '>', 'value' => 2, 'is_value_processed' => null], ['type' => 'Magento\\SalesRule\\Model\\Rule\\Condition\\Product\\Found', 'attribute' => null, 'operator' => null, 'value' => 1, 'is_value_processed' => null, 'aggregator' => 'all', 'conditions' => [['type' => 'Magento\\SalesRule\\Model\\Rule\\Condition\\Product', 'attribute' => 'category_ids', 'operator' => '==', 'value' => 3, 'is_value_processed' => null]]]]]; $dataCondition = $this->getMockBuilder('\\Magento\\SalesRule\\Model\\Data\\Condition')->setMethods(['setData'])->disableOriginalConstructor()->getMock(); $this->conditionDataFactory->expects($this->any())->method('create')->willReturn($dataCondition); $return = $this->model->arrayToConditionDataModel($array); $this->assertEquals($dataCondition, $return); }
/** * Convert recursive array into condition data model * * @param array $input * @return Condition */ public function arrayToConditionDataModel(array $input) { /** @var \Magento\SalesRule\Model\Data\Condition $conditionDataModel */ $conditionDataModel = $this->conditionDataFactory->create(); foreach ($input as $key => $value) { switch ($key) { case 'type': $conditionDataModel->setConditionType($value); break; case 'attribute': $conditionDataModel->setAttributeName($value); break; case 'operator': $conditionDataModel->setOperator($value); break; case 'value': $conditionDataModel->setValue($value); break; case 'aggregator': $conditionDataModel->setAggregatorType($value); break; case 'conditions': $conditions = []; foreach ($value as $condition) { $conditions[] = $this->arrayToConditionDataModel($condition); } $conditionDataModel->setConditions($conditions); break; default: } } return $conditionDataModel; }