<?php
namespace Cbm\Tests\Helper;
use Cbm\Application\EducationService\Entity\ServiceTypeKeyEnum;
use Cbm\Application\Messenger\Message\Entity\MessengerMessage;
use Cbm\Application\Messenger\Message\MessengerMessageRepositoryInterface;
use Cbm\Application\Modifier\Entity\ModifierNameEnum;
use Cbm\Application\Orchestration\Entity\FlowId;
use Cbm\Application\Orchestration\Entity\SalesToolId;
use Cbm\Application\Orchestration\Modifier\Specification\MessengerFlow\DemoLessonMessengerFlowModifierSpecification;
use Cbm\Controller\Amqp\MessengerMessage\MessageInAddedConsumer;
use Cbm\Controller\Amqp\MessengerMessage\StatusCreatedConsumer;
use Cbm\Tests\Mock\CommunicationsMocks;
use PhpAmqpLib\Message\AMQPMessage;
use Ramsey\Uuid\Uuid;
use Ramsey\Uuid\UuidInterface;
class MessengerFlowHelper extends BaseModule
{
public function haveActiveMessengerFlow(?SalesToolId $salesToolId = null): void
{
if ($salesToolId === null) {
$salesToolId = SalesToolId::MESSENGER_ADULT_ENGLISH_PAY_BEFORE();
}
$esId = mt_rand();
$flowHelper = $this->getFlowHelper();
$flowHelper->initContext(
ServiceTypeKeyEnum::ENGLISH_ADULT_NOT_NATIVE_SPEAKER,
FlowId::DEMO_LESSON_ADULT_ENGLISH_MESSENGER(),
$salesToolId,
$esId,
);
$flowHelper->createModifier(ModifierNameEnum::MESSENGER_FLOW(), [
DemoLessonMessengerFlowModifierSpecification::GROUP_B,
]);
$this->getClickhouseEventAnalyticsMocks()->wantMockClickhouseEventAnalyticsSendEvents();
$this->getCrm2Mocks()->wantMockCrm2AppendSpecialComment($flowHelper->getContext()->getEducationServiceId());
}
public function sendMessageToUser(): UuidInterface
{
$uuid = Uuid::uuid4();
$flowHelper = $this->getFlowHelper();
$context = $flowHelper->getContext();
$messengerMessage = MessengerMessage::create($uuid, $context->getEducationServiceId(), $context->getUserId());
$functionalModule = $this->getFunctionalModule();
$messengerMessageRepository = $functionalModule->getSymfonyServiceByClassName(
MessengerMessageRepositoryInterface::class,
);
$messengerMessageRepository->save($messengerMessage);
return $uuid;
}
public function setLastMessageAnswered(int $userId): void
{
$messageId = mt_rand();
$uuid = Uuid::uuid4();
$message = new AMQPMessage(
json_try_encode([
'thread_id' => mt_rand(),
'message_id' => $messageId,
'uuid' => $uuid->toString(),
]),
);
/** @var CommunicationsMocks $communicationsMocks */
$communicationsMocks = $this->getModule('\\' . CommunicationsMocks::class);
$communicationsMocks->wantMockCommunicationsWAFromUserMessage($messageId, $userId);
$functionalModule = $this->getFunctionalModule();
/** @var MessageInAddedConsumer $consumer */
$consumer = $functionalModule->getSymfonyServiceByClassName(MessageInAddedConsumer::class);
$consumer->execute($message);
}
public function setMessageRead(string $uuid): void
{
$message = new AMQPMessage(
json_try_encode([
'name' => 'read',
'message_id' => mt_rand(),
'message_uuid' => $uuid,
]),
);
$functionalModule = $this->getFunctionalModule();
/** @var StatusCreatedConsumer $consumer */
$consumer = $functionalModule->getSymfonyServiceByClassName(StatusCreatedConsumer::class);
$consumer->execute($message);
}
}