File size: 2,775 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
<?php

declare(strict_types=1);

namespace Mautic\EmailBundle\Tests\Validator;

use Mautic\EmailBundle\Exception\InvalidEmailException;
use Mautic\EmailBundle\Helper\EmailValidator;
use Mautic\EmailBundle\Validator\MultipleEmailsValidValidator;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
use Symfony\Component\Validator\Violation\ConstraintViolationBuilderInterface;

class MultipleEmailsValidValidatorTest extends \PHPUnit\Framework\TestCase
{
    public function testNoEmailsProvided(): void
    {
        $emailValidatorMock = $this->createMock(EmailValidator::class);
        $constraintMock     = $this->createMock(Constraint::class);

        $emailValidatorMock->expects($this->never())
            ->method('validate');

        $multipleEmailsValidValidator = new MultipleEmailsValidValidator($emailValidatorMock);

        $multipleEmailsValidValidator->validate(null, $constraintMock);
    }

    public function testValidEmails(): void
    {
        $emailValidatorMock = $this->createMock(EmailValidator::class);
        $constraintMock     = $this->createMock(Constraint::class);

        $emailValidatorMock->expects($this->exactly(2))
            ->method('validate')
            ->withConsecutive(['[email protected]'], ['[email protected]']);

        $multipleEmailsValidValidator = new MultipleEmailsValidValidator($emailValidatorMock);

        $emails = '[email protected], [email protected]';
        $multipleEmailsValidValidator->validate($emails, $constraintMock);
    }

    public function testNotValidEmails(): void
    {
        $emailValidatorMock                      = $this->createMock(EmailValidator::class);
        $constraintMock                          = $this->createMock(Constraint::class);
        $executionContextInterfaceMock           = $this->createMock(ExecutionContextInterface::class);
        $constraintViolationBuilderInterfaceMock = $this->createMock(ConstraintViolationBuilderInterface::class);

        $emailValidatorMock->expects($this->exactly(1))
            ->method('validate')
            ->with('xxx')
            ->willThrowException(new InvalidEmailException('xxx'));

        $executionContextInterfaceMock->expects($this->once())
            ->method('buildViolation')
            ->willReturn($constraintViolationBuilderInterfaceMock);

        $constraintViolationBuilderInterfaceMock->expects($this->once())
            ->method('addViolation')
            ->with();

        $multipleEmailsValidValidator = new MultipleEmailsValidValidator($emailValidatorMock);
        $multipleEmailsValidValidator->initialize($executionContextInterfaceMock);

        $emails = 'xxx';
        $multipleEmailsValidValidator->validate($emails, $constraintMock);
    }
}