101 lines
3.7 KiB
PHP
101 lines
3.7 KiB
PHP
<?php
|
|
|
|
namespace KupShop\BonusProgramBundle\Tests;
|
|
|
|
use KupShop\DevelopmentBundle\Util\Tests\CartTestTrait;
|
|
use KupShop\OrderDiscountBundle\Tests\OrderTestDiscountTrait;
|
|
use KupShop\OrderDiscountBundle\Util\DiscountManager;
|
|
use KupShop\OrderingBundle\Util\Purchase\PurchaseUtil;
|
|
use Query\Operator;
|
|
|
|
class BonusProgramOtherReceiverTest extends \DatabaseTestCase
|
|
{
|
|
use CartTestTrait;
|
|
use OrderTestDiscountTrait;
|
|
private ?PurchaseUtil $currencyContext = null;
|
|
private ?DiscountManager $discountManager = null;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
|
|
$this->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();
|
|
}
|
|
}
|