|
| 1 | +<?php |
| 2 | + |
| 3 | + |
| 4 | +namespace Symfony\Component\Mailer\Bridge\Mailjet\Tests\Transport; |
| 5 | + |
| 6 | + |
| 7 | +use PHPUnit\Framework\TestCase; |
| 8 | +use Symfony\Component\Mailer\Bridge\Mailjet\Transport\MailjetApiTransport; |
| 9 | +use Symfony\Component\Mailer\Envelope; |
| 10 | +use Symfony\Component\Mime\Address; |
| 11 | +use Symfony\Component\Mime\Email; |
| 12 | + |
| 13 | +class MailjetApiTransportTest extends TestCase |
| 14 | +{ |
| 15 | + protected const USER = 'u$er'; |
| 16 | + protected const PASSWORD = 'pa$s'; |
| 17 | + |
| 18 | + /** |
| 19 | + * @dataProvider getTransportData |
| 20 | + */ |
| 21 | + public function testToString(MailjetApiTransport $transport, string $expected) |
| 22 | + { |
| 23 | + $this->assertSame($expected, (string) $transport); |
| 24 | + } |
| 25 | + |
| 26 | + public function getTransportData() |
| 27 | + { |
| 28 | + return [ |
| 29 | + [ |
| 30 | + new MailjetApiTransport(self::USER, self::PASSWORD), |
| 31 | + 'mailjet+api://api.mailjet.com', |
| 32 | + ], |
| 33 | + [ |
| 34 | + (new MailjetApiTransport(self::USER, self::PASSWORD))->setHost('example.com'), |
| 35 | + 'mailjet+api://example.com', |
| 36 | + ], |
| 37 | + ]; |
| 38 | + } |
| 39 | + |
| 40 | + public function testPayloadFormat() |
| 41 | + { |
| 42 | + $email = (new Email()) |
| 43 | + ->subject('Sending email to mailjet API'); |
| 44 | + $email->getHeaders() |
| 45 | + ->addTextHeader('X-authorized-header', 'authorized') |
| 46 | + ->addTextHeader('X-MJ-TemplateLanguage', 'forbidden'); // This header is forbidden |
| 47 | + $envelope = new Envelope(new Address('foo@example.com', 'Foo'), [new Address('bar@example.com', 'Bar'), new Address('baz@example.com', 'Baz')]); |
| 48 | + |
| 49 | + $transport = new MailjetApiTransport(self::USER, self::PASSWORD); |
| 50 | + $method = new \ReflectionMethod(MailjetApiTransport::class, 'getPayload'); |
| 51 | + $method->setAccessible(true); |
| 52 | + $payload = $method->invoke($transport, $email, $envelope); |
| 53 | + |
| 54 | + $this->assertArrayHasKey('Messages', $payload); |
| 55 | + $this->assertNotEmpty($payload['Messages']); |
| 56 | + |
| 57 | + $message = $payload['Messages'][0]; |
| 58 | + $this->assertArrayHasKey('Subject', $message); |
| 59 | + $this->assertEquals('Sending email to mailjet API', $message['Subject']); |
| 60 | + |
| 61 | + $this->assertArrayHasKey('Headers', $message); |
| 62 | + $headers = $message['Headers']; |
| 63 | + $this->assertArrayHasKey('X-authorized-header', $headers); |
| 64 | + $this->assertEquals('authorized', $headers['X-authorized-header']); |
| 65 | + $this->assertArrayNotHasKey('x-mj-templatelanguage', $headers); |
| 66 | + $this->assertArrayNotHasKey('X-MJ-TemplateLanguage', $headers); |
| 67 | + |
| 68 | + $this->assertArrayHasKey('From', $message); |
| 69 | + $sender = $message['From']; |
| 70 | + $this->assertArrayHasKey('Email', $sender); |
| 71 | + $this->assertArrayHasKey('Name', $sender); |
| 72 | + $this->assertEquals('foo@example.com', $sender['Email']); |
| 73 | + $this->assertEquals('Foo', $sender['Name']); |
| 74 | + |
| 75 | + $this->assertArrayHasKey('To', $message); |
| 76 | + $recipients = $message['To']; |
| 77 | + $this->assertIsArray($recipients); |
| 78 | + $this->assertCount(2, $recipients); |
| 79 | + $this->assertEquals('bar@example.com', $recipients[0]['Email']); |
| 80 | + $this->assertEquals('', $recipients[0]['Name']); // For Recipients, even if the name is filled, it is empty |
| 81 | + $this->assertEquals('baz@example.com', $recipients[1]['Email']); |
| 82 | + $this->assertEquals('', $recipients[1]['Name']); |
| 83 | + |
| 84 | + |
| 85 | + } |
| 86 | +} |
0 commit comments