purchaseStateUtil = $this->get(PurchaseUtil::class); $this->discountManager = $this->get(DiscountManager::class); } /** @dataProvider data_purchaseStateProvider */ public function testOrderStorno($applyModule) { $applyModule(); $points = sqlQueryBuilder()->select('SUM(points)') ->from('bonus_points') ->groupBy('id_user') ->andWhere(Operator::equals(['id_user' => 1])) ->execute()->fetchOne(); $this->assertEquals(300, $points, 'Uzivatel ma 300 bodu z 2 objednavek'); $this->order = \Order::get(1); $this->order->storno(); $points = sqlQueryBuilder()->select('SUM(points)') ->from('bonus_points') ->groupBy('id_user') ->andWhere(Operator::equals(['id_user' => 1])) ->andWhere(Operator::not(Operator::equals(['status' => 'deleted']))) ->execute()->fetchOne(); $this->assertEquals(100, $points, 'Po stornu objednavky id 1 uzivateli zbyde 100 bodu'); } /** @dataProvider data_purchaseStateProvider */ public function testApplyActions($applyModule) { $applyModule(); $this->activateDiscount([1]); $this->prepareCart(); $this->insertProduct(9); $this->cart->addCoupon('INFLUENCER10'); $this->cart->addCoupon('INFLUENCER20'); $this->cart->createFromDB(); $pState = $this->purchaseStateUtil->createStateFromCart($this->cart); $this->discountManager->setPurchaseState($pState); $this->discountManager->recalculate(); $coupons = $pState->getActiveCoupons(); $data = $pState->getCustomData('points_for_other_receivers'); $this->assertEquals('INFLUENCER10', $coupons['INFLUENCER10'], 'Uplatneni kuponu na odjednavku'); $this->assertEquals(1, $data[0]['user_id'], 'Nasetovani uzivatale, ktery obdrzi body'); $this->assertEquals('INFLUENCER20', $coupons['INFLUENCER20'], 'Uplatneni slevy na odjednavce'); $this->assertEquals(3, $data[1]['user_id'], 'Nasetovani uzivatale, ktery obdrzi body'); $points = $pState->getProductsTotalPrice()->getPriceWithVat()->asFloat() * 0.1 + 100; $this->assertEquals($points, $data[0]['points'], '5999 cena produktu, 599.9 (10%) bodu z ceny produktu + 100 bodu pevne mnozstvi', 0.01); $points = $pState->getProductsTotalPrice()->getPriceWithVat()->asFloat() * 0.2; $this->assertEquals($points, $data[1]['points'], '5999 cena produktu, 1199.8 (20%) bodu z ceny produktu', 0.01); $this->order = $this->submitOrder(); // overeni zapsani bodu BonusComputerem do DB $userBonus = sqlQueryBuilder()->select('*')->from('bonus_points') ->andWhere(Operator::inIntArray(array_column($data, 'user_id'), 'id_user')) ->execute()->fetchAllAssociative(); $this->assertEquals(1, $userBonus[2]['id_user']); $this->assertEquals(700, $userBonus[2]['points']); $this->assertEquals(3, $userBonus[3]['id_user']); $this->assertEquals(1200, $userBonus[3]['points']); } public function getDataSet() { return $this->getJsonDataSetFromFile(); } }