test(pulse): cover heartbeat enable/disable gate
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user