Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
CreateSalesRuleEntityTest.php
Go to the documentation of this file.
1 <?php
8 
11 use Magento\Mtf\Fixture\FixtureFactory;
12 use Magento\Mtf\TestCase\Injectable;
15 use Magento\SalesRule\Test\Page\Adminhtml\PromoQuoteEdit;
16 use Magento\SalesRule\Test\Page\Adminhtml\PromoQuoteIndex;
17 use Magento\SalesRule\Test\Page\Adminhtml\PromoQuoteNew;
18 
34 class CreateSalesRuleEntityTest extends Injectable
35 {
36  /* tags */
37  const MVP = 'yes';
38  const TEST_TYPE = 'extended_acceptance_test';
39  /* end tags */
40 
46  protected $promoQuoteNew;
47 
53  protected $promoQuoteEdit;
54 
60  protected $promoQuoteIndex;
61 
67  protected $salesRuleName;
68 
74  protected $fixtureFactory;
75 
85  public function __inject(
86  PromoQuoteNew $promoQuoteNew,
87  PromoQuoteIndex $promoQuoteIndex,
88  PromoQuoteEdit $promoQuoteEdit,
89  FixtureFactory $fixtureFactory
90  ) {
91  $this->promoQuoteNew = $promoQuoteNew;
92  $this->promoQuoteIndex = $promoQuoteIndex;
93  $this->promoQuoteEdit = $promoQuoteEdit;
94  $this->fixtureFactory = $fixtureFactory;
95  }
96 
106  public function testCreateSalesRule(
107  SalesRule $salesRule,
108  CatalogProductSimple $productForSalesRule1,
109  CatalogProductSimple $productForSalesRule2 = null,
110  Customer $customer = null,
111  $conditionEntity = null,
112  SalesRule $salesRuleEdit = null
113  ) {
114  $replace = null;
115  $this->salesRuleName = $salesRule->getName();
116 
117  // Prepare data
118  if ($customer !== null) {
119  $customer->persist();
120  }
121  $productForSalesRule1->persist();
122  if ($productForSalesRule2 !== null) {
123  $productForSalesRule2->persist();
124  if ($conditionEntity !== null) {
125  $replace = $this->prepareCondition($productForSalesRule2, $conditionEntity);
126  }
127  }
128 
129  // Steps
130  $this->promoQuoteNew->open();
131  $this->promoQuoteNew->getSalesRuleForm()->fill($salesRule, null, $replace);
132 
133  if ($salesRule->getCouponType() == "Auto") {
134  $this->promoQuoteNew->getFormPageActions()->saveAndContinue();
135  $form = $this->promoQuoteEdit->getSalesRuleForm();
136  $form->openSection('manage_coupon_code');
138  $section = $form->getSection('manage_coupon_code');
139  $section->fill($salesRuleEdit);
140  $section->generateCouponCodes();
141  $couponCode = $section->getGeneratedCouponCode();
142  $this->promoQuoteEdit->getFormPageActions()->save();
143 
144  return ["couponCode" => $couponCode];
145  } else {
146  $this->promoQuoteNew->getFormPageActions()->save();
147  }
148  }
149 
157  protected function prepareCondition(CatalogProductSimple $productSimple, $conditionEntity)
158  {
159  $result = [];
160 
161  switch ($conditionEntity) {
162  case 'category':
163  $result['%category_id%'] = $productSimple->getDataFieldConfig('category_ids')['source']->getIds()[0];
164  break;
165  case 'attribute':
167  $attributes = $productSimple->getDataFieldConfig('attribute_set_id')['source']
168  ->getAttributeSet()->getDataFieldConfig('assigned_attributes')['source']->getAttributes();
169 
170  $result['%attribute_name%'] = $attributes[0]->getFrontendLabel();
171  $result['%attribute_value%'] = $attributes[0]->getOptions()[0]['view'];
172  break;
173  }
174 
175  return [
176  'conditions' => [
177  'conditions_serialized' => $result,
178  ],
179  ];
180  }
181 
187  public function tearDown()
188  {
189  $filter = [
190  'name' => $this->salesRuleName,
191  ];
192 
193  $this->promoQuoteIndex->open();
194  $this->promoQuoteIndex->getPromoQuoteGrid()->searchAndOpen($filter);
195  $this->promoQuoteEdit->getFormPageActions()->delete();
196  $this->promoQuoteEdit->getModalBlock()->acceptAlert();
197  }
198 }
$customer
Definition: customers.php:11
$attributes
Definition: matrix.phtml:13
__inject(PromoQuoteNew $promoQuoteNew, PromoQuoteIndex $promoQuoteIndex, PromoQuoteEdit $promoQuoteEdit, FixtureFactory $fixtureFactory)