File size: 4,139 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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<?php

namespace Mautic\EmailBundle\Tests\MonitoredEmail\Search;

use Mautic\EmailBundle\Entity\Email;
use Mautic\EmailBundle\Entity\Stat;
use Mautic\EmailBundle\Entity\StatRepository;
use Mautic\EmailBundle\MonitoredEmail\Search\ContactFinder;
use Mautic\EmailBundle\MonitoredEmail\Search\Result;
use Mautic\LeadBundle\Entity\Lead;
use Mautic\LeadBundle\Entity\LeadRepository;
use Monolog\Logger;

class ContactFinderTest extends \PHPUnit\Framework\TestCase
{
    /**
     * @testdox Contact should be found via contact email address
     *
     * @covers  \Mautic\EmailBundle\MonitoredEmail\Search\ContactFinder::find
     * @covers  \Mautic\EmailBundle\MonitoredEmail\Search\ContactFinder::findByAddress
     * @covers  \Mautic\EmailBundle\MonitoredEmail\Search\Result::setStat
     * @covers  \Mautic\EmailBundle\MonitoredEmail\Search\Result::getStat
     * @covers  \Mautic\EmailBundle\MonitoredEmail\Search\Result::setContacts
     * @covers  \Mautic\EmailBundle\MonitoredEmail\Search\Result::getContacts
     */
    public function testContactFoundByDelegationForAddress(): void
    {
        $lead = new Lead();
        $lead->setEmail('[email protected]');

        $statRepository = $this->getMockBuilder(StatRepository::class)
            ->disableOriginalConstructor()
            ->getMock();
        $statRepository->expects($this->never())
            ->method('findOneBy');

        $leadRepository = $this->getMockBuilder(LeadRepository::class)
            ->disableOriginalConstructor()
            ->getMock();
        $leadRepository->expects($this->once())
            ->method('getContactsByEmail')
            ->willReturn([$lead]);

        $logger = $this->getMockBuilder(Logger::class)
            ->disableOriginalConstructor()
            ->getMock();

        $finder = new ContactFinder($statRepository, $leadRepository, $logger);
        $result = $finder->find($lead->getEmail(), '[email protected]');

        $this->assertInstanceOf(Result::class, $result);

        $this->assertEquals($result->getContacts(), [$lead]);
    }

    /**
     * @testdox Contact should be found via a hash in to email address
     *
     * @covers  \Mautic\EmailBundle\MonitoredEmail\Search\ContactFinder::find
     * @covers  \Mautic\EmailBundle\MonitoredEmail\Search\ContactFinder::findByHash
     * @covers  \Mautic\EmailBundle\MonitoredEmail\Processor\Address::parseAddressForStatHash
     * @covers  \Mautic\EmailBundle\MonitoredEmail\Search\Result::setStat
     * @covers  \Mautic\EmailBundle\MonitoredEmail\Search\Result::getStat
     * @covers  \Mautic\EmailBundle\MonitoredEmail\Search\Result::addContact
     * @covers  \Mautic\EmailBundle\MonitoredEmail\Search\Result::getContacts
     */
    public function testContactFoundByDelegationForHash(): void
    {
        $lead = new Lead();
        $lead->setEmail('[email protected]');

        $stat = new Stat();
        $stat->setLead($lead);

        $statRepository = $this->getMockBuilder(StatRepository::class)
            ->disableOriginalConstructor()
            ->getMock();
        $statRepository->expects($this->once())
            ->method('findOneBy')
            ->willReturnCallback(
                function ($hash) use ($stat) {
                    $stat->setTrackingHash($hash);

                    $email = new Email();
                    $stat->setEmail($email);

                    return $stat;
                }
            );

        $leadRepository = $this->getMockBuilder(LeadRepository::class)
            ->disableOriginalConstructor()
            ->getMock();
        $leadRepository->expects($this->never())
            ->method('getContactsByEmail');

        $logger = $this->getMockBuilder(Logger::class)
            ->disableOriginalConstructor()
            ->getMock();

        $finder = new ContactFinder($statRepository, $leadRepository, $logger);
        $result = $finder->find($lead->getEmail(), '[email protected]');

        $this->assertInstanceOf(Result::class, $result);

        $this->assertEquals($result->getStat(), $stat);
        $this->assertEquals($result->getContacts(), [$lead]);
    }
}