149 lines
4.3 KiB
PHP
149 lines
4.3 KiB
PHP
<?php
|
|
|
|
namespace KupShop\GlobalDiscountsBundle\Tests;
|
|
|
|
use Doctrine\DBAL\Connection;
|
|
use KupShop\GlobalDiscountsBundle\Util\GlobalDiscounts;
|
|
|
|
class GlobalDiscountsTest extends \DatabaseTestCase
|
|
{
|
|
/** @var GlobalDiscounts */
|
|
private $globalDiscounts;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
|
|
$this->globalDiscounts = $this->get(GlobalDiscounts::class);
|
|
|
|
$this->makeDiscountsDateActive([1, 2, 5]);
|
|
}
|
|
|
|
public function testApplyDiscountsOnProduct()
|
|
{
|
|
$product = new \Product();
|
|
$product->createFromDB(8);
|
|
|
|
$product2 = new \Product();
|
|
$product2->createFromDB(9);
|
|
|
|
$this->assertEquals(0, $product->discount->asFloat());
|
|
$this->assertEquals(0, $product2->discount->asFloat());
|
|
|
|
$this->globalDiscounts->applyDiscountsOnProducts([8, 9]);
|
|
|
|
$product->createFromDB(8);
|
|
$product2->createFromDB(9);
|
|
|
|
$this->assertEquals(10, $product->discount->asFloat());
|
|
$this->assertEquals(0, $product2->discount->asFloat());
|
|
}
|
|
|
|
public function testRecalculateDiscounts()
|
|
{
|
|
$product = new \Product();
|
|
$product->createFromDB(7);
|
|
|
|
$this->assertEquals(30, $product->discount->asFloat());
|
|
|
|
$this->globalDiscounts->recalculateDiscounts();
|
|
|
|
$product->createFromDB(7);
|
|
|
|
$this->assertEquals(10, $product->discount->asFloat());
|
|
}
|
|
|
|
public function testDeactivateDiscounts()
|
|
{
|
|
$this->assertCount(1, $this->globalDiscounts->getDeactivableDiscounts());
|
|
|
|
$this->globalDiscounts->deactivateDiscounts();
|
|
|
|
$this->assertEmpty($this->globalDiscounts->getDeactivableDiscounts());
|
|
}
|
|
|
|
public function testActivateDiscounts()
|
|
{
|
|
$this->assertCount(2, $this->globalDiscounts->getActiveDiscounts());
|
|
|
|
$this->globalDiscounts->activateDiscounts();
|
|
|
|
$this->assertEmpty($this->globalDiscounts->getActivatableDiscounts());
|
|
$this->assertCount(4, $this->globalDiscounts->getActiveDiscounts());
|
|
}
|
|
|
|
public function testDeactivateDiscount()
|
|
{
|
|
$this->assertCount(2, $this->globalDiscounts->getActiveDiscounts());
|
|
|
|
$this->globalDiscounts->deactivateDiscount(
|
|
$this->globalDiscounts->getDiscount(3)
|
|
);
|
|
|
|
$products = $this->selectSQL('products', ['producer' => 12], ['id']);
|
|
|
|
foreach ($products as $product) {
|
|
$productObj = new \Product();
|
|
$productObj->createFromDB($product['id']);
|
|
|
|
$this->assertEquals(0, $productObj->discount->asFloat());
|
|
}
|
|
|
|
$this->assertCount(1, $this->globalDiscounts->getActiveDiscounts());
|
|
}
|
|
|
|
public function testActivateDiscount()
|
|
{
|
|
$this->assertCount(2, $this->globalDiscounts->getActiveDiscounts());
|
|
|
|
$discount = $this->globalDiscounts->getDiscount(1);
|
|
$this->globalDiscounts->activateDiscount($discount);
|
|
|
|
$products = $this->selectSQL('products', ['producer' => 10], ['id']);
|
|
|
|
foreach ($products as $product) {
|
|
$productObj = new \Product();
|
|
$productObj->createFromDB($product['id']);
|
|
|
|
if (isset($productObj->campaign_codes['FS'])) {
|
|
$this->assertNotEquals($discount['discount'], $productObj->discount->asFloat());
|
|
} else {
|
|
$this->assertEquals($discount['discount'], $productObj->discount->asFloat());
|
|
}
|
|
}
|
|
|
|
$this->assertCount(3, $this->globalDiscounts->getActiveDiscounts());
|
|
}
|
|
|
|
public function testGetActivatableDiscounts()
|
|
{
|
|
$discounts = $this->globalDiscounts->getActivatableDiscounts();
|
|
|
|
$this->assertCount(2, $discounts);
|
|
}
|
|
|
|
public function testGetActiveDiscounts()
|
|
{
|
|
$discounts = $this->globalDiscounts->getActiveDiscounts();
|
|
|
|
$this->assertCount(2, $discounts);
|
|
}
|
|
|
|
public function testGetDeactivableDiscounts()
|
|
{
|
|
$discounts = $this->globalDiscounts->getDeactivableDiscounts();
|
|
|
|
$this->assertCount(1, $discounts);
|
|
}
|
|
|
|
private function makeDiscountsDateActive(array $discountIds)
|
|
{
|
|
sqlQuery('UPDATE global_discounts SET date_from = (NOW() - INTERVAL 1 DAY), date_to = (NOW() + INTERVAL 1 DAY) WHERE id IN (:ids)', ['ids' => $discountIds], ['ids' => Connection::PARAM_INT_ARRAY]);
|
|
}
|
|
|
|
protected function getDataSet()
|
|
{
|
|
return $this->getJsonDataSetFromFile();
|
|
}
|
|
}
|