/**
  * Apply coupon before one page checkout.
  *
  * @return void
  */
 public function run()
 {
     if ($this->salesRule !== null) {
         $this->checkoutCart->getDiscountCodesBlock()->applyCouponCode($this->salesRule->getCouponCode());
         $this->checkoutCart->getTotalsBlock()->waitForUpdatedTotals();
     }
 }
예제 #2
0
 /**
  * Enter discount code and click apply button.
  *
  * @param SalesRule $code
  * @return void
  */
 public function applyCouponCode(SalesRule $code)
 {
     $couponField = $this->_rootElement->find($this->couponCode);
     $couponField->click();
     $couponField->keys(str_split($code->getCouponCode()));
     $this->waitForElementVisible($this->applyButton, Locator::SELECTOR_XPATH);
     $this->_rootElement->find($this->applyButton, Locator::SELECTOR_XPATH)->click();
     $this->getTemplateBlock()->waitLoader();
 }
예제 #3
0
 /**
  * Delete Sales Rule Entity.
  *
  * @param SalesRule $salesRule
  * @return void
  */
 public function testDeleteSalesRule(SalesRule $salesRule)
 {
     // Preconditions
     $salesRule->persist();
     // Steps
     $this->promoQuoteIndex->open();
     $this->promoQuoteIndex->getPromoQuoteGrid()->searchAndOpen(['name' => $salesRule->getName()]);
     $this->promoQuoteEdit->getFormPageActions()->delete();
 }
 /**
  * Assert that displayed sales rule data on edit page(backend) equals passed from fixture.
  *
  * @param PromoQuoteIndex $promoQuoteIndex
  * @param PromoQuoteEdit $promoQuoteEdit
  * @param SalesRule $salesRule
  * @param SalesRule $salesRuleOrigin
  * @return void
  */
 public function processAssert(PromoQuoteIndex $promoQuoteIndex, PromoQuoteEdit $promoQuoteEdit, SalesRule $salesRule, SalesRule $salesRuleOrigin = null)
 {
     $filter = ['name' => $salesRule->hasData('name') ? $salesRule->getName() : $salesRuleOrigin->getName()];
     $promoQuoteIndex->open();
     $promoQuoteIndex->getPromoQuoteGrid()->searchAndOpen($filter);
     $formData = $promoQuoteEdit->getSalesRuleForm()->getData();
     $fixtureData = $salesRuleOrigin != null ? array_merge($salesRuleOrigin->getData(), $salesRule->getData()) : $salesRule->getData();
     $dataDiff = $this->verify($fixtureData, $formData);
     \PHPUnit_Framework_Assert::assertTrue(empty($dataDiff), 'Sales rule data on edit page(backend) not equals to passed from fixture.' . "\nFailed values:\n " . implode(";\n ", $dataDiff));
 }
 /**
  * Update Sales Rule Entity.
  *
  * @param SalesRule $salesRule
  * @param SalesRule $salesRuleOrigin
  * @return void
  */
 public function testUpdateSalesRule(SalesRule $salesRule, SalesRule $salesRuleOrigin)
 {
     // Preconditions
     $salesRuleOrigin->persist();
     $filter = ['name' => $salesRuleOrigin->getName()];
     $this->salesRuleName = $salesRule->hasData('name') ? $salesRule->getName() : $salesRuleOrigin->getName();
     // Steps
     $this->promoQuoteIndex->open();
     $this->promoQuoteIndex->getPromoQuoteGrid()->searchAndOpen($filter);
     $this->promoQuoteEdit->getSalesRuleForm()->fill($salesRule);
     $this->promoQuoteEdit->getFormPageActions()->save();
 }
예제 #6
0
 /**
  * Create coupon related to sales rule .
  *
  * @param int $ruleId
  * @return void
  * @throws \Exception
  */
 protected function createCoupon($ruleId)
 {
     if (!$this->fixture->hasData('coupon_code')) {
         return;
     }
     $url = $_ENV['app_frontend_url'] . 'rest/V1/coupons';
     $data = ['coupon' => array_filter(['rule_id' => $ruleId, 'code' => $this->fixture->getCouponCode(), 'type' => $this->data['coupon_type'], 'usage_limit' => isset($this->data['uses_per_coupon']) ? $this->data['uses_per_coupon'] : null, 'usage_per_customer' => isset($this->data['usage_per_customer']) ? $this->data['usage_per_customer'] : null, 'is_primary' => true])];
     $this->webapiTransport->write($url, $data);
     $response = json_decode($this->webapiTransport->read(), true);
     $this->webapiTransport->close();
     if (empty($response['coupon_id'])) {
         $this->eventManager->dispatchEvent(['webapi_failed'], [$response]);
         throw new \Exception('Coupon creation by webapi handler was not successful!');
     }
 }
예제 #7
0
 /**
  * Prepare data for creating sales rule request.
  *
  * @param FixtureInterface $fixture
  * @return array
  */
 public function prepareData(FixtureInterface $fixture)
 {
     $this->fixture = $fixture;
     $this->data = $this->replaceMappingData($this->fixture->getData());
     $this->data['rule'] = [];
     if (isset($this->data['conditions_serialized'])) {
         $this->data['rule']['conditions'] = $this->prepareCondition($this->data['conditions_serialized']);
         unset($this->data['conditions_serialized']);
     }
     $this->prepareWebsites();
     $this->prepareCustomerGroup();
     if (isset($this->data['actions_serialized'])) {
         $this->mapTypeParams['Conditions combination']['type'] = 'Magento\\SalesRule\\Model\\Rule\\Condition\\Product\\Combine';
         $this->data['rule']['actions'] = $this->prepareCondition($this->data['actions_serialized']);
         unset($this->data['actions_serialized']);
     }
     return $this->data;
 }
 /**
  * Create Sales Rule Entity.
  *
  * @param SalesRule $salesRule
  * @return void
  */
 public function testCreateSalesRule(SalesRule $salesRule)
 {
     // Preconditions
     $this->salesRuleName = $salesRule->getName();
     // Steps
     $this->promoQuoteNew->open();
     $this->promoQuoteNew->getSalesRuleForm()->fill($salesRule);
     $this->promoQuoteNew->getFormPageActions()->save();
 }
 /**
  * Apply coupon before one page checkout.
  *
  * @return void
  */
 public function run()
 {
     if ($this->salesRule !== null) {
         $this->checkoutCart->getDiscountCodesBlock()->applyCouponCode($this->salesRule->getCouponCode());
     }
 }
예제 #10
0
 /**
  * Prepare coupon data.
  *
  * @param SalesRule $data
  * @return array
  */
 protected function prepareCouponCode(SalesRule $data)
 {
     return ['order' => ['coupon' => ['code' => $data->getCouponCode()]]];
 }
예제 #11
0
파일: Coupons.php 프로젝트: shazal/magento2
 /**
  * Enter discount code and click apply button.
  *
  * @param SalesRule $code
  * @return void
  */
 public function applyCouponCode(SalesRule $code)
 {
     $this->_rootElement->find($this->couponCode)->setValue($code->getCouponCode());
     $this->_rootElement->find($this->applyButton, Locator::SELECTOR_XPATH)->click();
 }
 /**
  * 1. Navigate to frontend
  * 2. If "Log Out" link is visible and "isLoggedIn" empty
  *    - makes logout
  * 3. If "isLoggedIn" not empty
  *    - login as customer
  * 4. Clear shopping cart
  * 5. Add test product(s) to shopping cart with specify quantity
  * 6. If "salesRule/data/coupon_code" not empty:
  *    - fill "Enter your code" input in Dіscount Codes
  *    - click "Apply Coupon" button
  * 7. If "address/data/country_id" not empty:
  *    On Estimate Shipping and Tax:
  *    - fill Country, State/Province, Zip/Postal Code
  *    - click 'Get a Quote' button
  *    - select 'Flat Rate' shipping
  *    - click 'Update Total' button
  * 8. Implementation assert
  *
  * @param CheckoutCart $checkoutCart
  * @param CmsIndex $cmsIndex
  * @param CustomerAccountLogin $customerAccountLogin
  * @param CustomerAccountLogout $customerAccountLogout
  * @param CatalogCategoryView $catalogCategoryView
  * @param CatalogProductView $catalogProductView
  * @param SalesRule $salesRule
  * @param SalesRule $salesRuleOrigin
  * @param array $productQuantity
  * @param CatalogProductSimple $productForSalesRule1
  * @param CatalogProductSimple $productForSalesRule2
  * @param Customer $customer
  * @param Address $address
  * @param int|null $isLoggedIn
  * @param array $shipping
  * @param array $cartPrice
  * @return void
  *
  * @SuppressWarnings(PHPMD.ExcessiveParameterList)
  */
 public function processAssert(CheckoutCart $checkoutCart, CmsIndex $cmsIndex, CustomerAccountLogin $customerAccountLogin, CustomerAccountLogout $customerAccountLogout, CatalogCategoryView $catalogCategoryView, CatalogProductView $catalogProductView, SalesRule $salesRule, SalesRule $salesRuleOrigin, array $productQuantity, CatalogProductSimple $productForSalesRule1, CatalogProductSimple $productForSalesRule2 = null, Customer $customer = null, Address $address = null, $isLoggedIn = null, array $shipping = [], array $cartPrice = [])
 {
     $this->checkoutCart = $checkoutCart;
     $this->cmsIndex = $cmsIndex;
     $this->customerAccountLogin = $customerAccountLogin;
     $this->customerAccountLogout = $customerAccountLogout;
     $this->catalogCategoryView = $catalogCategoryView;
     $this->catalogProductView = $catalogProductView;
     $this->productForSalesRule1 = $productForSalesRule1;
     $this->productForSalesRule2 = $productForSalesRule2;
     $this->cartPrice = $cartPrice;
     if ($customer !== null) {
         $this->customer = $customer;
     }
     $isLoggedIn ? $this->login() : $this->customerAccountLogout->open();
     $this->checkoutCart->open()->getCartBlock()->clearShoppingCart();
     $this->addProductsToCart($productQuantity);
     $this->checkoutCart->open();
     if ($address !== null) {
         $this->checkoutCart->getShippingBlock()->fillEstimateShippingAndTax($address);
         $this->checkoutCart->getShippingBlock()->selectShippingMethod($shipping);
     }
     if ($salesRule->getCouponCode() || $salesRuleOrigin->getCouponCode()) {
         $this->checkoutCart->getDiscountCodesBlock()->applyCouponCode($salesRule->getCouponCode() ? $salesRule->getCouponCode() : $salesRuleOrigin->getCouponCode());
     }
     $this->assert();
 }
 /**
  * Assert that sales rule is not present in cart price rules grid.
  *
  * @param PromoQuoteIndex $promoQuoteIndex
  * @param SalesRule $salesRule
  * @return void
  */
 public function processAssert(PromoQuoteIndex $promoQuoteIndex, SalesRule $salesRule)
 {
     \PHPUnit_Framework_Assert::assertFalse($promoQuoteIndex->getPromoQuoteGrid()->isRowVisible(['name' => $salesRule->getName()]), 'Sales rule \'' . $salesRule->getName() . '\' is present in cart price rules grid.');
 }
 /**
  * Create Sales Price Rule.
  *
  * @param SalesRule $salesRule
  * @param CatalogProductSimple $productForSalesRule1
  * @param CatalogProductSimple $productForSalesRule2
  * @param Customer $customer
  * @param string $conditionEntity
  */
 public function testCreateSalesRule(SalesRule $salesRule, CatalogProductSimple $productForSalesRule1, CatalogProductSimple $productForSalesRule2 = null, Customer $customer = null, $conditionEntity = null)
 {
     $replace = null;
     $this->salesRuleName = $salesRule->getName();
     // Prepare data
     if ($customer !== null) {
         $customer->persist();
     }
     $productForSalesRule1->persist();
     if ($productForSalesRule2 !== null) {
         $productForSalesRule2->persist();
         if ($conditionEntity !== null) {
             $replace = $this->prepareCondition($productForSalesRule2, $conditionEntity);
         }
     }
     // Steps
     $this->promoQuoteNew->open();
     $this->promoQuoteNew->getSalesRuleForm()->fill($salesRule, null, $replace);
     $this->promoQuoteNew->getFormPageActions()->save();
 }
 /**
  * Test product prices with tax.
  *
  * @param CatalogProductSimple $product
  * @param string $configData
  * @param SalesRule $salesRule [optional]
  * @param CatalogRule $catalogRule [optional]
  * @return void
  */
 public function test(CatalogProductSimple $product, $configData, SalesRule $salesRule = null, CatalogRule $catalogRule = null)
 {
     //Preconditions
     if ($salesRule !== null) {
         $salesRule->persist();
         $this->salesRule = $salesRule;
     }
     if ($catalogRule !== null) {
         $catalogRule->persist();
         $this->catalogRule = $catalogRule;
     }
     $this->objectManager->create('Magento\\Config\\Test\\TestStep\\SetupConfigurationStep', ['configData' => $configData])->run();
     $product->persist();
 }