/** * 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(); } }
/** * 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(); }
/** * 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(); }
/** * 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!'); } }
/** * 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()); } }
/** * Prepare coupon data. * * @param SalesRule $data * @return array */ protected function prepareCouponCode(SalesRule $data) { return ['order' => ['coupon' => ['code' => $data->getCouponCode()]]]; }
/** * 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(); }