first commit

This commit is contained in:
2025-08-02 16:30:27 +02:00
commit 23646bfcee
14851 changed files with 1750626 additions and 0 deletions

View File

@@ -0,0 +1,88 @@
<?php
namespace KupShop\WarehouseBundle\Tests;
use KupShop\CatalogBundle\Util\Product\ProductPriceWeigher;
use KupShop\WarehouseBundle\Util\StockInWorker;
use Query\Operator;
class ProductWeightedPurchasePriceTest extends \DatabaseTestCase
{
/** @var ProductPriceWeigher */
private $productPriceWeigher;
/** @var StockInWorker */
private $stockInWorker;
protected function setUp(): void
{
parent::setUp();
$this->productPriceWeigher = $this->createPartialMock(ProductPriceWeigher::class, ['getOldItem']);
$this->stockInWorker = $this->get(StockInWorker::class);
}
public function testAddStoreItemWithFilledPriceBuy()
{
$IDP = 3;
$this->updateSQL('products', ['in_store' => 0, 'price_buy' => 15], ['id' => $IDP]);
$this->removeModule(\Modules::PRODUCTS, \Modules::SUB_PRICE_BUY);
$this->addModule(\Modules::STOCK_IN, \Modules::SUB_WEIGHTED_PURCHASE_PRICE);
$this->addStoreItem([
'id_product' => $IDP,
'id_variation' => null,
'quantity' => 10,
'price' => 4,
'additional_costs' => 1,
]);
$this->checkWeightedPrice($IDP, 5);
$this->addStoreItem([
'id_product' => $IDP,
'id_variation' => null,
'quantity' => 10,
'price' => 6,
'additional_costs' => 1,
]);
$this->checkWeightedPrice($IDP, 6);
$this->sellItem($IDP, 15);
$this->addStoreItem([
'id_product' => $IDP,
'id_variation' => null,
'quantity' => 5,
'price' => 8,
'additional_costs' => 1,
]);
$this->checkWeightedPrice($IDP, 7.5);
$this->sellItem($IDP, 10);
$this->addStoreItem([
'id_product' => $IDP,
'id_variation' => null,
'quantity' => 4,
'price' => 7,
'additional_costs' => 1,
]);
$this->checkWeightedPrice($IDP, 8);
}
protected function addStoreItem($stockInItem)
{
$this->stockInWorker->storeIn($stockInItem, $stockInItem['quantity']);
}
protected function sellItem($id_product, $pieces)
{
sqlQuery('UPDATE products set in_store=in_store - :in_store where id = :id', ['id' => $id_product, 'in_store' => $pieces]);
}
private function checkWeightedPrice($id_product, $weighted_price_expected)
{
$weighted_price = sqlQueryBuilder()->select('price_buy')->from('products')->where(Operator::equals(['id' => $id_product]))->execute()->fetchColumn();
$this->assertEquals($weighted_price_expected, $weighted_price, 'Vazena nakupni cena nesedi!');
}
}