Spaces:
No application file
No application file
| declare(strict_types=1); | |
| namespace Mautic\IntegrationsBundle\Tests\Functional\Sync\Notification; | |
| use Mautic\CoreBundle\Test\MauticMysqlTestCase; | |
| use Mautic\IntegrationsBundle\Helper\SyncIntegrationsHelper; | |
| use Mautic\IntegrationsBundle\Sync\DAO\Sync\Order\NotificationDAO; | |
| use Mautic\IntegrationsBundle\Sync\DAO\Sync\Order\ObjectChangeDAO; | |
| use Mautic\IntegrationsBundle\Sync\Notification\Notifier; | |
| use Mautic\IntegrationsBundle\Sync\SyncDataExchange\Internal\Object\Contact; | |
| use Mautic\IntegrationsBundle\Sync\SyncDataExchange\MauticSyncDataExchange; | |
| use Mautic\IntegrationsBundle\Tests\Functional\Services\SyncService\TestExamples\Integration\ExampleIntegration; | |
| use Mautic\IntegrationsBundle\Tests\Functional\Services\SyncService\TestExamples\Sync\SyncDataExchange\ExampleSyncDataExchange; | |
| use Mautic\LeadBundle\DataFixtures\ORM\LoadLeadData; | |
| use Mautic\LeadBundle\Entity\Lead; | |
| class NotifierTest extends MauticMysqlTestCase | |
| { | |
| public function testNotifications(): void | |
| { | |
| $this->installDatabaseFixtures([LoadLeadData::class]); | |
| $leadRepository = $this->em->getRepository(Lead::class); | |
| /** @var Lead[] $leads */ | |
| $leads = $leadRepository->findBy([], [], 2); | |
| /** @var SyncIntegrationsHelper $syncIntegrationsHelper */ | |
| $syncIntegrationsHelper = static::getContainer()->get('mautic.integrations.helper.sync_integrations'); | |
| $syncIntegrationsHelper->addIntegration(new ExampleIntegration(new ExampleSyncDataExchange())); | |
| /** @var Notifier $notifier */ | |
| $notifier = static::getContainer()->get('mautic.integrations.sync.notifier'); | |
| $contactNotification = new NotificationDAO( | |
| new ObjectChangeDAO( | |
| ExampleIntegration::NAME, | |
| 'Foo', | |
| 1, | |
| Contact::NAME, | |
| (int) $leads[0]->getId() | |
| ), | |
| 'This is the message' | |
| ); | |
| $companyNotification = new NotificationDAO( | |
| new ObjectChangeDAO( | |
| ExampleIntegration::NAME, | |
| 'Bar', | |
| 2, | |
| MauticSyncDataExchange::OBJECT_COMPANY, | |
| (int) $leads[1]->getId() | |
| ), | |
| 'This is the message' | |
| ); | |
| $notifier->noteMauticSyncIssue([$contactNotification, $companyNotification]); | |
| $notifier->finalizeNotifications(); | |
| // Check audit log | |
| $qb = $this->connection->createQueryBuilder(); | |
| $qb->select('1') | |
| ->from(MAUTIC_TABLE_PREFIX.'audit_log') | |
| ->where( | |
| $qb->expr()->eq('bundle', $qb->expr()->literal(ExampleIntegration::NAME)) | |
| ); | |
| $this->assertCount(2, $qb->executeQuery()->fetchAllAssociative()); | |
| // Contact event log | |
| $qb = $this->connection->createQueryBuilder(); | |
| $qb->select('1') | |
| ->from(MAUTIC_TABLE_PREFIX.'lead_event_log') | |
| ->where( | |
| $qb->expr()->and( | |
| $qb->expr()->eq('bundle', $qb->expr()->literal('integrations')), | |
| $qb->expr()->eq('object', $qb->expr()->literal(ExampleIntegration::NAME)) | |
| ) | |
| ); | |
| $this->assertCount(1, $qb->executeQuery()->fetchAllAssociative()); | |
| // User notifications | |
| $qb = $this->connection->createQueryBuilder(); | |
| $qb->select('1') | |
| ->from(MAUTIC_TABLE_PREFIX.'notifications') | |
| ->where( | |
| $qb->expr()->eq('icon_class', $qb->expr()->literal('ri-refresh-line')) | |
| ); | |
| $this->assertCount(2, $qb->executeQuery()->fetchAllAssociative()); | |
| } | |
| } | |