Initial commit: CloudOps infrastructure platform

This commit is contained in:
root
2026-04-09 19:58:57 +02:00
commit 1166a52f26
7762 changed files with 839452 additions and 0 deletions

View File

@@ -0,0 +1,119 @@
<?php
declare(strict_types=1);
namespace Mautic\ChannelBundle\Tests\Command;
use Mautic\ChannelBundle\Entity\MessageQueue;
use Mautic\CoreBundle\Test\MauticMysqlTestCase;
use Mautic\CoreBundle\Tests\Functional\CreateTestEntitiesTrait;
use Mautic\EmailBundle\Entity\Email;
use Mautic\EmailBundle\Entity\Stat;
use Mautic\EmailBundle\Entity\StatRepository;
use Mautic\LeadBundle\Entity\Lead;
use PHPUnit\Framework\Assert;
final class ProcessMarketingMessagesQueueCommandFunctionalTest extends MauticMysqlTestCase
{
use CreateTestEntitiesTrait;
public function testIdleCommand(): void
{
$commandTester = $this->testSymfonyCommand('mautic:messages:send');
Assert::assertSame(0, $commandTester->getStatusCode());
}
public function testCommandWithEmailQueue(): void
{
$email = $this->createEmail('Test Email');
$this->em->flush();
$scheduledDate = new \DateTime('-10 minutes');
$datePublished = new \DateTime('-1 day');
// Create 60 different leads and message queue items
$leads = [];
$messages = [];
for ($i = 0; $i < 60; ++$i) {
$leads[$i] = $this->createLead("John{$i}", "Doe{$i}", "jd{$i}@example.com");
$this->em->persist($leads[$i]);
}
$this->em->flush();
// Create a message for each lead
foreach ($leads as $lead) {
$messages[] = $this->createMessageQueue($email, $lead, $scheduledDate, $datePublished);
}
foreach ($messages as $message) {
$this->em->persist($message);
}
$this->em->flush();
$commandTester = $this->testSymfonyCommand('mautic:messages:send');
Assert::assertSame(0, $commandTester->getStatusCode());
Assert::assertStringContainsString('Messages sent: 60', $commandTester->getDisplay());
// Verify that stats were created for a sample of leads
$this->assertEmailStatCreated($email, $leads[0]);
$this->assertEmailStatCreated($email, $leads[29]);
$this->assertEmailStatCreated($email, $leads[59]);
}
public function testCommandWithLimitParameter(): void
{
$lead = $this->createLead('John', 'Doe', 'jd@example.com');
$email1 = $this->createEmail('Test Email 1');
$email2 = $this->createEmail('Test Email 2');
$email3 = $this->createEmail('Test Email 3');
$this->em->flush();
$scheduledDate = new \DateTime('-10 minutes');
$datePublished = new \DateTime('-1 day');
$messages = [
$this->createMessageQueue($email1, $lead, $scheduledDate, $datePublished),
$this->createMessageQueue($email2, $lead, $scheduledDate, $datePublished),
$this->createMessageQueue($email3, $lead, $scheduledDate, $datePublished),
];
foreach ($messages as $message) {
$this->em->persist($message);
}
$this->em->flush();
$commandTester = $this->testSymfonyCommand('mautic:messages:send', ['--limit' => 2]);
Assert::assertSame(0, $commandTester->getStatusCode());
Assert::assertStringContainsString('Messages sent: 2', $commandTester->getDisplay());
}
private function createMessageQueue(Email $email, Lead $lead, \DateTime $scheduledDate, \DateTime $datePublished): MessageQueue
{
$message = new MessageQueue();
$message->setScheduledDate($scheduledDate);
$message->setDatePublished($datePublished);
$message->setChannel('email');
$message->setChannelId($email->getId());
$message->setLead($lead);
$message->setPriority(MessageQueue::PRIORITY_NORMAL);
$message->setMaxAttempts(3);
$message->setAttempts(0);
$message->setStatus(MessageQueue::STATUS_PENDING);
return $message;
}
private function assertEmailStatCreated(Email $email, Lead $lead): void
{
/** @var StatRepository $emailStatRepository */
$emailStatRepository = $this->em->getRepository(Stat::class);
/** @var Stat|null $emailStat */
$emailStat = $emailStatRepository->findOneBy([
'email' => $email->getId(),
'lead' => $lead->getId(),
]);
Assert::assertNotNull($emailStat, "Email stat not created for email ID {$email->getId()} and lead ID {$lead->getId()}");
}
}

View File

@@ -0,0 +1,23 @@
<?php
declare(strict_types=1);
namespace Mautic\ChannelBundle\Tests\Command;
use Mautic\CoreBundle\Test\MauticMysqlTestCase;
use PHPUnit\Framework\Assert;
final class SendChannelBroadcastCommandTest extends MauticMysqlTestCase
{
public function testBroadcastCommand(): void
{
$commandTester = $this->testSymfonyCommand('mautic:broadcasts:send');
Assert::assertSame(0, $commandTester->getStatusCode());
}
public function testBroadcastCommandWithLimit(): void
{
$commandTester = $this->testSymfonyCommand('mautic:broadcasts:send', ['--limit' => 1]);
Assert::assertSame(0, $commandTester->getStatusCode());
}
}