Files
kupshop/bundles/KupShop/GlobalDiscountsBundle/Tests/GlobalDiscountsTest.php
2025-08-02 16:30:27 +02:00

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();
}
}