Spaces:
No application file
No application file
mautic
/
app
/bundles
/IntegrationsBundle
/Tests
/Unit
/Sync
/Notification
/Helper
/UserSummaryNotificationHelperTest.php
| declare(strict_types=1); | |
| namespace Mautic\IntegrationsBundle\Tests\Unit\Sync\Notification\Helper; | |
| use Mautic\IntegrationsBundle\Sync\Notification\Helper\OwnerProvider; | |
| use Mautic\IntegrationsBundle\Sync\Notification\Helper\RouteHelper; | |
| use Mautic\IntegrationsBundle\Sync\Notification\Helper\UserHelper; | |
| use Mautic\IntegrationsBundle\Sync\Notification\Helper\UserSummaryNotificationHelper; | |
| use Mautic\IntegrationsBundle\Sync\Notification\Writer; | |
| use Mautic\IntegrationsBundle\Sync\SyncDataExchange\Internal\Object\Contact; | |
| use PHPUnit\Framework\MockObject\MockObject; | |
| use PHPUnit\Framework\TestCase; | |
| use Symfony\Contracts\Translation\TranslatorInterface; | |
| class UserSummaryNotificationHelperTest extends TestCase | |
| { | |
| /** | |
| * @var Writer|MockObject | |
| */ | |
| private MockObject $writer; | |
| /** | |
| * @var UserHelper|MockObject | |
| */ | |
| private MockObject $userHelper; | |
| /** | |
| * @var OwnerProvider|MockObject | |
| */ | |
| private MockObject $ownerProvider; | |
| /** | |
| * @var RouteHelper|MockObject | |
| */ | |
| private MockObject $routeHelper; | |
| /** | |
| * @var TranslatorInterface|MockObject | |
| */ | |
| private MockObject $translator; | |
| private UserSummaryNotificationHelper $helper; | |
| protected function setUp(): void | |
| { | |
| $this->writer = $this->createMock(Writer::class); | |
| $this->userHelper = $this->createMock(UserHelper::class); | |
| $this->ownerProvider = $this->createMock(OwnerProvider::class); | |
| $this->routeHelper = $this->createMock(RouteHelper::class); | |
| $this->translator = $this->createMock(TranslatorInterface::class); | |
| $this->helper = new UserSummaryNotificationHelper( | |
| $this->writer, | |
| $this->userHelper, | |
| $this->ownerProvider, | |
| $this->routeHelper, | |
| $this->translator | |
| ); | |
| } | |
| public function testNotificationSentToOwner(): void | |
| { | |
| $this->helper->storeSummaryNotification('Foo', 'Bar', 1); | |
| $this->helper->storeSummaryNotification('Bar', 'Foo', 2); | |
| $this->ownerProvider->expects($this->exactly(2)) | |
| ->method('getOwnersForObjectIds') | |
| ->withConsecutive( | |
| [Contact::NAME, [1 => 1]], | |
| [Contact::NAME, [2 => 2]] | |
| ) | |
| ->willReturnOnConsecutiveCalls( | |
| [['owner_id' => 1, 'id' => 1]], | |
| [['owner_id' => 2, 'id' => 2]] | |
| ); | |
| $this->userHelper->expects($this->never()) | |
| ->method('getAdminUsers'); | |
| $this->translator->expects($this->exactly(4)) | |
| ->method('trans') | |
| ->withConsecutive( | |
| ['mautic.integration.sync.user_notification.header', $this->anything()], | |
| ['test', $this->anything()], | |
| ['mautic.integration.sync.user_notification.header', $this->anything()], | |
| ['test', $this->anything()] | |
| ) | |
| ->willReturn('test'); | |
| $this->writer->expects($this->exactly(2)) | |
| ->method('writeUserNotification'); | |
| $this->routeHelper->expects($this->exactly(2)) | |
| ->method('getLinkCsv'); | |
| $this->helper->writeNotifications(Contact::NAME, 'test'); | |
| } | |
| public function testNotificationSentToAdmins(): void | |
| { | |
| $this->helper->storeSummaryNotification('Foo', 'Bar', 1); | |
| $this->helper->storeSummaryNotification('Bar', 'Foo', 2); | |
| $this->ownerProvider->expects($this->exactly(2)) | |
| ->method('getOwnersForObjectIds') | |
| ->withConsecutive( | |
| [Contact::NAME, [1 => 1]], | |
| [Contact::NAME, [2 => 2]] | |
| ) | |
| ->willReturnOnConsecutiveCalls( | |
| [], | |
| [] | |
| ); | |
| $this->userHelper->expects($this->exactly(2)) | |
| ->method('getAdminUsers') | |
| ->willReturn([1]); | |
| $this->translator->expects($this->exactly(4)) | |
| ->method('trans') | |
| ->withConsecutive( | |
| ['mautic.integration.sync.user_notification.header', $this->anything()], | |
| ['test', $this->anything()], | |
| ['mautic.integration.sync.user_notification.header', $this->anything()], | |
| ['test', $this->anything()] | |
| ) | |
| ->willReturn('test'); | |
| $this->writer->expects($this->exactly(2)) | |
| ->method('writeUserNotification'); | |
| $this->routeHelper->expects($this->exactly(2)) | |
| ->method('getLinkCsv'); | |
| $this->helper->writeNotifications(Contact::NAME, 'test'); | |
| } | |
| public function testMoreThan25ObjectsResultInCountMessage(): void | |
| { | |
| $counter = 1; | |
| $withIds = []; | |
| do { | |
| $this->helper->storeSummaryNotification('Foo', 'Bar', $counter); | |
| $withIds[$counter] = $counter; | |
| ++$counter; | |
| } while ($counter <= 26); | |
| $this->ownerProvider->expects($this->once()) | |
| ->method('getOwnersForObjectIds') | |
| ->with(Contact::NAME, $withIds) | |
| ->willReturn([]); | |
| $this->userHelper->expects($this->once()) | |
| ->method('getAdminUsers') | |
| ->willReturn([1]); | |
| $this->translator->expects($this->exactly(2)) | |
| ->method('trans') | |
| ->willReturnCallback( | |
| function ($string, $params) { | |
| $expectedStrings = [ | |
| 'mautic.integration.sync.user_notification.header', | |
| 'mautic.integration.sync.user_notification.count_message', | |
| ]; | |
| if (!in_array($string, $expectedStrings)) { | |
| $this->fail($string.' is not an expected translation key'); | |
| } | |
| return $string; | |
| } | |
| ); | |
| $this->writer->expects($this->exactly(1)) | |
| ->method('writeUserNotification'); | |
| $this->routeHelper->expects($this->never()) | |
| ->method('getLinkCsv'); | |
| $this->helper->writeNotifications(Contact::NAME, 'test'); | |
| } | |
| } | |