File size: 3,192 Bytes
d2897cd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<?php

namespace Mautic\CampaignBundle\Tests\Service;

use Mautic\CampaignBundle\Entity\Campaign;
use Mautic\CampaignBundle\Entity\CampaignRepository;
use Mautic\CampaignBundle\Service\CampaignAuditService;
use Mautic\CoreBundle\Service\FlashBag;
use Mautic\EmailBundle\Entity\Email;
use Mautic\EmailBundle\Entity\EmailRepository;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;

class CampaignAuditServiceTest extends TestCase
{
    private MockObject $flashBag;
    private MockObject $urlGenerator;
    private MockObject $campaignRepository;
    private MockObject $emailRepository;
    private CampaignAuditService $campaignAuditService;

    protected function setUp(): void
    {
        $this->flashBag           = $this->createMock(FlashBag::class);
        $this->urlGenerator       = $this->createMock(UrlGeneratorInterface::class);
        $this->campaignRepository = $this->createMock(CampaignRepository::class);
        $this->emailRepository    = $this->createMock(EmailRepository::class);

        $this->campaignAuditService = new CampaignAuditService(
            $this->flashBag,
            $this->urlGenerator,
            $this->campaignRepository,
            $this->emailRepository,
        );
    }

    public function testAddWarningForUnpublishedEmails(): void
    {
        $campaign = new Campaign();
        $campaign->setPublishDown(new \DateTime('-1 day'));

        $email1 = new Email();
        $email1->setIsPublished(false);

        $email2 = new Email();
        $email2->setIsPublished(true);
        $email2->setPublishDown(new \DateTime('-1 day'));

        $this->campaignRepository->expects($this->once())
            ->method('fetchEmailIdsById')
            ->with($campaign->getId())
            ->willReturn([1, 2]);

        $this->emailRepository->expects($this->once())
            ->method('findBy')
            ->with(['id' => [1, 2]])
            ->willReturn([$email1, $email2]);

        $this->urlGenerator->expects($this->exactly(2))
            ->method('generate')
           ->willReturnOnConsecutiveCalls(
               '/s/emails/edit/1',
               '/s/emails/edit/2'
           );

        $this->flashBag->expects($this->exactly(2))
            ->method('add')
            ->withConsecutive(
                [
                    'mautic.core.notice.campaign.unpublished.email',
                    [
                        '%name%'      => null,
                        '%menu_link%' => 'mautic_email_index',
                        '%url%'       => '/s/emails/edit/1',
                    ],
                    FlashBag::LEVEL_WARNING,
                ],
                [
                    'mautic.core.notice.campaign.unpublished.email',
                    [
                        '%name%'      => null,
                        '%menu_link%' => 'mautic_email_index',
                        '%url%'       => '/s/emails/edit/2',
                    ],
                    FlashBag::LEVEL_WARNING,
                ]
            );

        $this->campaignAuditService->addWarningForUnpublishedEmails($campaign);
    }
}