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

92 lines
3.0 KiB
PHP

<?php
declare(strict_types=1);
namespace KupShop\WatchdogBundle\Tests;
use KupShop\DevelopmentBundle\MailArchive;
use KupShop\KupShopBundle\Context\CurrencyContext;
use KupShop\KupShopBundle\Context\LanguageContext;
use KupShop\KupShopBundle\Util\Contexts;
use KupShop\WatchdogBundle\Util\Watchdog;
class WatchdogPriceTest extends \DatabaseTestCase
{
private Watchdog $watchdog;
private MailArchive $mailArchive;
protected function setUp(): void
{
parent::setUp();
$this->set(CurrencyContext::class, $this->autowire(CurrencyContextTest::class));
$this->watchdog = $this->get(\KupShop\WatchdogBundle\Util\Watchdog::class);
$this->mailArchive = $this->get(MailArchive::class);
$this->mailArchive->clearArchive();
}
/** @dataProvider data_testPriceWatchdogIsSent */
public function testPriceWatchdogIsSent(array $watchdog, bool $expectIsSent, ?string $expectInText = null): void
{
$this->createWatchdog(...$watchdog);
$this->watchdog->generateWatchdogs();
$mail = $this->mailArchive->getLast();
if ($expectIsSent) {
$this->assertNotEmpty($mail);
if ($expectInText) {
$this->assertContains($expectInText, $mail['body']);
}
} else {
$this->assertEmpty($mail);
}
}
private function data_testPriceWatchdogIsSent(): iterable
{
yield 'Watchdog s vyssi cenou, nez je aktualni cena CZK' => [[1, 1, 4, null, 5500, 'CZK'], true, 'pod 5 500 Kč'];
yield 'Watchdog s vyssi cenou, nez je aktualni cena CZK' => [[1, 1, 4, 1, 5500, 'CZK'], true, 'pod 5 500 Kč'];
yield 'Watchdog s nizsi cenou nez je aktualni cena CZK' => [[1, 1, 4, 1, 3500, 'CZK'], false];
yield 'Watchdog s vyssi cenou v EUR, ktery byl ale ulozeny pod CZ sitou, takze se posle v CZK' => [[1, 1, 4, 1, 220, 'EUR'], true, 'pod 5 720 Kč'];
yield 'Watchdog s nizsi cenou, nez je aktualni cena v EUR' => [[1, 1, 4, 1, 100, 'EUR'], false];
yield 'Watchdog s vyssi cenou v EUR, ktery byl ale ulozeny pod SK sitou' => [[2, 1, 4, 1, 220, 'EUR'], true, 'pod 220,00 €'];
}
protected function getDataSet()
{
return $this->getJsonDataSetFromFile();
}
private function createWatchdog(int $siteId, int $userId, int $productId, ?int $variationId, float $price, string $currency): void
{
sqlQueryBuilder()
->insert('products_watchdog')
->directValues([
'id_site' => $siteId,
'id_user' => $userId,
'id_product' => $productId,
'id_variation' => $variationId,
'price' => $price,
'currency' => $currency,
'availability' => 0,
])
->execute();
}
}
class CurrencyContextTest extends \KupShop\I18nBundle\Context\CurrencyContext
{
protected function loadActive()
{
return match (Contexts::get(LanguageContext::class)->getActiveId()) {
'cs' => 'CZK',
'sk' => 'EUR',
};
}
}