From 01e9c22695a3e495f07ab445750221af72e09fe4 Mon Sep 17 00:00:00 2001 From: Igor Scheller Date: Wed, 5 Sep 2018 13:40:03 +0200 Subject: Implemented mailing abstraction Closes #434 --- tests/Unit/Mail/Transport/LogTransportTest.php | 60 ++++++++++++++++ .../Transport/Stub/TransportImplementation.php | 35 +++++++++ tests/Unit/Mail/Transport/TransportTest.php | 83 ++++++++++++++++++++++ 3 files changed, 178 insertions(+) create mode 100644 tests/Unit/Mail/Transport/LogTransportTest.php create mode 100644 tests/Unit/Mail/Transport/Stub/TransportImplementation.php create mode 100644 tests/Unit/Mail/Transport/TransportTest.php (limited to 'tests/Unit/Mail/Transport') diff --git a/tests/Unit/Mail/Transport/LogTransportTest.php b/tests/Unit/Mail/Transport/LogTransportTest.php new file mode 100644 index 00000000..5eb3a667 --- /dev/null +++ b/tests/Unit/Mail/Transport/LogTransportTest.php @@ -0,0 +1,60 @@ +getMockForAbstractClass(LoggerInterface::class); + /** @var SimpleMessage|MockObject $message */ + $message = $this->createMock(SimpleMessage::class); + + $message->expects($this->once()) + ->method('getSubject') + ->willReturn('Some subject'); + $message->expects($this->once()) + ->method('getHeaders') + ->willReturn('Head: er'); + $message->expects($this->once()) + ->method('toString') + ->willReturn('Message body'); + + $logger->expects($this->once()) + ->method('debug') + ->willReturnCallback(function ($message, $context = []) { + foreach (array_keys($context) as $key) { + $this->assertContains(sprintf('{%s}', $key), $message); + } + + $this->assertEquals('Some subject', $context['title']); + $this->assertEquals('foo@bar.batz,Lorem Ipsum ', $context['recipients']); + $this->assertContains('Head: er', $context['content']); + $this->assertContains('Message body', $context['content']); + }); + + /** @var LogTransport|MockObject $transport */ + $transport = $this->getMockBuilder(LogTransport::class) + ->setConstructorArgs(['logger' => $logger]) + ->setMethods(['allRecipients']) + ->getMock(); + $transport->expects($this->exactly(2)) + ->method('allRecipients') + ->with($message) + ->willReturn(['foo@bar.batz' => null, 'lor@em.ips' => 'Lorem Ipsum']); + + $return = $transport->send($message); + $this->equalTo(2, $return); + } +} diff --git a/tests/Unit/Mail/Transport/Stub/TransportImplementation.php b/tests/Unit/Mail/Transport/Stub/TransportImplementation.php new file mode 100644 index 00000000..e3667c6e --- /dev/null +++ b/tests/Unit/Mail/Transport/Stub/TransportImplementation.php @@ -0,0 +1,35 @@ +allRecipients($message); + } + + /** + * @param SimpleMessage $message + * @return string + */ + public function getGetTo(SimpleMessage $message) + { + return $this->getTo($message); + } +} diff --git a/tests/Unit/Mail/Transport/TransportTest.php b/tests/Unit/Mail/Transport/TransportTest.php new file mode 100644 index 00000000..60f2079d --- /dev/null +++ b/tests/Unit/Mail/Transport/TransportTest.php @@ -0,0 +1,83 @@ +assertTrue($transport->isStarted()); + $this->assertTrue($transport->ping()); + } + + /** + * @covers \Engelsystem\Mail\Transport\Transport::allRecipients + */ + public function testAllRecipients() + { + /** @var SimpleMessage|MockObject $message */ + $message = $this->createMock(SimpleMessage::class); + $transport = new TransportImplementation(); + $message->expects($this->once()) + ->method('getTo') + ->willReturn([ + 'foo@bar.batz' => 'Foo Bar', + 'lorem@ipsum.dolor' => null, + ]); + $message->expects($this->once()) + ->method('getCc') + ->willReturn([ + 'to@bar.batz' => null, + ]); + $message->expects($this->once()) + ->method('getBcc') + ->willReturn([ + 'secret@bar.batz' => 'I\'m secret!', + ]); + + $this->assertEquals( + [ + 'foo@bar.batz' => 'Foo Bar', + 'lorem@ipsum.dolor' => null, + 'to@bar.batz' => null, + 'secret@bar.batz' => 'I\'m secret!', + ], + $transport->getAllRecipients($message) + ); + } + + /** + * @covers \Engelsystem\Mail\Transport\Transport::getTo + * @covers \Engelsystem\Mail\Transport\Transport::formatTo + */ + public function testGetTo() + { + /** @var SimpleMessage|MockObject $message */ + $message = $this->createMock(SimpleMessage::class); + /** @var TransportImplementation|MockObject $transport */ + $transport = $this->getMockBuilder(TransportImplementation::class) + ->setMethods(['allRecipients']) + ->getMock(); + $transport->expects($this->once()) + ->method('allRecipients') + ->with($message) + ->willReturn([ + 'foo@bar.batz' => null, + 'lorem@ipsum.dolor' => 'Developer', + ]); + + $return = $transport->getGetTo($message); + $this->assertEquals('foo@bar.batz,Developer ', $return); + } +} -- cgit v1.2.3-54-g00ecf