test(pulse): cover heartbeat enable/disable gate

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-30 15:08:04 +03:00
parent 0198c8fcf2
commit d126dc3ef0

View File

@@ -0,0 +1,74 @@
<?php
namespace Tests\Unit\Framework\TeleCartPulse;
use Mockery as m;
use Openguru\OpenCartFramework\Cache\CacheInterface;
use Openguru\OpenCartFramework\TeleCartPulse\PayloadSigner;
use Openguru\OpenCartFramework\TeleCartPulse\TeleCartEvent;
use Openguru\OpenCartFramework\TeleCartPulse\TeleCartPulseService;
use Openguru\OpenCartFramework\Telegram\TelegramInitDataDecoder;
use Openguru\OpenCartFramework\Telegram\TelegramService;
use PHPUnit\Framework\TestCase;
use Psr\Log\LoggerInterface;
class TeleCartPulseServiceHeartbeatTest extends TestCase
{
protected function tearDown(): void
{
m::close();
parent::tearDown();
}
public function testDisabledHeartbeatSendsNothingAndTouchesNoCache(): void
{
$cache = m::mock(CacheInterface::class);
$cache->shouldNotReceive('get');
$cache->shouldNotReceive('set');
$telegramService = m::mock(TelegramService::class);
$telegramService->shouldNotReceive('getMe');
$service = new TeleCartPulseService(
m::mock(TelegramInitDataDecoder::class),
$telegramService,
$cache,
m::mock(LoggerInterface::class),
m::mock(TeleCartEvent::class),
'some-api-key',
m::mock(PayloadSigner::class),
false
);
$service->handleHeartbeat();
// shouldNotReceive() expectations are verified on Mockery::close() in tearDown.
$this->addToAssertionCount(1);
}
public function testEnabledHeartbeatPassesGateAndConsultsCache(): void
{
// Cache hit → метод выходит сразу после проверки кэша, не доходя до getMe()/HTTP.
$cache = m::mock(CacheInterface::class);
$cache->shouldReceive('get')->once()->with('telecart_pulse_heartbeat')->andReturn(time());
$cache->shouldNotReceive('set');
$telegramService = m::mock(TelegramService::class);
$telegramService->shouldNotReceive('getMe');
$service = new TeleCartPulseService(
m::mock(TelegramInitDataDecoder::class),
$telegramService,
$cache,
m::mock(LoggerInterface::class),
m::mock(TeleCartEvent::class),
'some-api-key',
m::mock(PayloadSigner::class),
true
);
$service->handleHeartbeat();
$this->addToAssertionCount(1);
}
}