File size: 3,946 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
<?php

declare(strict_types=1);

namespace Mautic\CampaignBundle\Tests\Controller\Api;

use Mautic\CampaignBundle\Entity\Lead as CampaignMember;
use Mautic\CampaignBundle\Tests\Campaign\AbstractCampaignTest;
use Mautic\LeadBundle\Entity\Lead;
use PHPUnit\Framework\Assert;
use Symfony\Component\HttpFoundation\Request;

class ContactCampaignApiControllerFunctionalTest extends AbstractCampaignTest
{
    public function testContactCampaignApiEndpoints(): void
    {
        $campaign = $this->saveSomeCampaignLeadEventLogs();
        $contact  = new Lead();
        $contact->setEmail('[email protected]');

        $this->em->persist($contact);
        $this->em->flush();

        $campaignMemberRepository = $this->em->getRepository(CampaignMember::class);

        // Add the contact to the campaign.
        $this->client->request(Request::METHOD_POST, "/api/campaigns/{$campaign->getId()}/contact/{$contact->getId()}/add");
        $clientResponse = $this->client->getResponse();
        Assert::assertTrue($clientResponse->isOk(), $clientResponse->getContent());
        Assert::assertSame('{"success":1}', $clientResponse->getContent());

        // Assert that the campaign member was really added.
        /** @var CampaignMember[] $campaignMembers */
        $campaignMembers = $campaignMemberRepository->findBy(['lead' => $contact->getId(), 'campaign' => $campaign->getId()]);
        Assert::assertCount(1, $campaignMembers);
        Assert::assertTrue($campaignMembers[0]->getManuallyAdded());
        Assert::assertFalse($campaignMembers[0]->getManuallyRemoved());

        // Get the contact's campaigns.
        $this->client->request(Request::METHOD_GET, "/api/contacts/{$contact->getId()}/campaigns");
        $clientResponse = $this->client->getResponse();
        Assert::assertTrue($clientResponse->isOk(), $clientResponse->getContent());
        $body = json_decode($clientResponse->getContent(), true);
        Assert::assertSame(1, $body['total'], $clientResponse->getContent());
        Assert::assertSame($campaign->getId(), $body['campaigns'][$campaign->getId()]['id'], $clientResponse->getContent());
        Assert::assertSame($campaign->getName(), $body['campaigns'][$campaign->getId()]['name'], $clientResponse->getContent());
        Assert::assertNotEmpty($body['campaigns'][$campaign->getId()]['dateAdded'], $clientResponse->getContent());
        Assert::assertFalse($body['campaigns'][$campaign->getId()]['manuallyRemoved'], $clientResponse->getContent());
        Assert::assertTrue($body['campaigns'][$campaign->getId()]['manuallyAdded'], $clientResponse->getContent());

        // Get campaign contacts API endpoint.
        $this->client->request(Request::METHOD_GET, "/api/campaigns/{$campaign->getId()}/contacts");
        $clientResponse = $this->client->getResponse();
        Assert::assertTrue($clientResponse->isOk(), $clientResponse->getContent());
        $body = json_decode($clientResponse->getContent(), true);
        Assert::assertSame(3, (int) $body['total']);
        Assert::assertSame($contact->getId(), (int) $body['contacts'][2]['lead_id']);

        // Remove the contact from the campaign.
        $this->client->request(Request::METHOD_POST, "/api/campaigns/{$campaign->getId()}/contact/{$contact->getId()}/remove");
        $clientResponse = $this->client->getResponse();
        Assert::assertTrue($clientResponse->isOk(), $clientResponse->getContent());
        Assert::assertSame('{"success":1}', $clientResponse->getContent());

        // Assert that the campaign member was really removed.
        /** @var CampaignMember[] $campaignMembers */
        $campaignMembers = $campaignMemberRepository->findBy(['lead' => $contact->getId(), 'campaign' => $campaign->getId()]);
        Assert::assertCount(1, $campaignMembers);
        Assert::assertFalse($campaignMembers[0]->getManuallyAdded());
        Assert::assertTrue($campaignMembers[0]->getManuallyRemoved());
    }
}