feat: MailJet list handling with DOI, webhook receiver and API endpoint
addresses #869cut134
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Tests\Model;
|
||||
|
||||
use App\Model\NewsletterSubscriptionRequest;
|
||||
use Symfony\Component\Validator\Constraint;
|
||||
use Symfony\Component\Validator\ConstraintValidatorFactory;
|
||||
use Symfony\Component\Validator\ConstraintValidatorInterface;
|
||||
use Symfony\Component\Validator\Constraints\Email;
|
||||
use Symfony\Component\Validator\Constraints\EmailValidator;
|
||||
use Symfony\Component\Validator\Validation;
|
||||
use Symfony\Component\Validator\Validator\ValidatorInterface;
|
||||
|
||||
class NewsletterSubscriptionRequestTest extends \PHPUnit\Framework\TestCase
|
||||
{
|
||||
public function testValidRequestPassesValidation(): void
|
||||
{
|
||||
$request = new NewsletterSubscriptionRequest();
|
||||
$request->email = '[email protected]';
|
||||
$request->listIds = [10321569, 12345678];
|
||||
$request->firstName = 'Mia';
|
||||
$request->lastName = 'Muster';
|
||||
|
||||
$violations = $this->validator()->validate($request);
|
||||
|
||||
self::assertCount(0, $violations);
|
||||
}
|
||||
|
||||
public function testTooLongNamesFailValidation(): void
|
||||
{
|
||||
$request = new NewsletterSubscriptionRequest();
|
||||
$request->email = '[email protected]';
|
||||
$request->listIds = [10321569];
|
||||
$request->firstName = str_repeat('A', 256);
|
||||
$request->lastName = str_repeat('B', 256);
|
||||
|
||||
$violations = $this->validator()->validate($request);
|
||||
|
||||
self::assertGreaterThanOrEqual(2, $violations->count());
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider invalidRequests
|
||||
*
|
||||
* @param list<mixed> $listIds
|
||||
*/
|
||||
public function testInvalidRequestFailsValidation(?string $email, array $listIds): void
|
||||
{
|
||||
$request = new NewsletterSubscriptionRequest();
|
||||
$request->email = $email;
|
||||
$request->listIds = $listIds;
|
||||
|
||||
$violations = $this->validator()->validate($request);
|
||||
|
||||
self::assertGreaterThan(0, $violations->count());
|
||||
}
|
||||
|
||||
/**
|
||||
* @return iterable<string, array{0: ?string, 1: list<mixed>}>
|
||||
*/
|
||||
public function invalidRequests(): iterable
|
||||
{
|
||||
yield 'invalid email' => ['not-an-email', [10321569]];
|
||||
yield 'empty list ids' => ['[email protected]', []];
|
||||
yield 'string list id' => ['[email protected]', ['10321569']];
|
||||
yield 'negative list id' => ['[email protected]', [-1]];
|
||||
}
|
||||
|
||||
private function validator(): ValidatorInterface
|
||||
{
|
||||
return Validation::createValidatorBuilder()
|
||||
->enableAttributeMapping()
|
||||
->setConstraintValidatorFactory(new class extends ConstraintValidatorFactory {
|
||||
public function getInstance(Constraint $constraint): ConstraintValidatorInterface
|
||||
{
|
||||
if (true === ($constraint instanceof Email)) {
|
||||
return new EmailValidator(Email::VALIDATION_MODE_HTML5);
|
||||
}
|
||||
|
||||
return parent::getInstance($constraint);
|
||||
}
|
||||
})
|
||||
->getValidator();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user