Skip to content

Commit

Permalink
Added typehints
Browse files Browse the repository at this point in the history
  • Loading branch information
raoul committed Jul 24, 2018
1 parent 7aacc66 commit a87dfd3
Show file tree
Hide file tree
Showing 8 changed files with 60 additions and 37 deletions.
6 changes: 1 addition & 5 deletions src/AsyncMessageQueueManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -72,11 +72,7 @@ public function __construct(
$this->minIntervalPromise = \React\Promise\resolve();
}

/**
* @param mixed $message
* @return \React\Promise\ExtendedPromiseInterface
*/
public function send($message): \React\Promise\ExtendedPromiseInterface
public function send(AsyncMessage $message): \React\Promise\ExtendedPromiseInterface
{
static $requestsCounter = 0;
$previousRequestsCount = $requestsCounter;
Expand Down
7 changes: 1 addition & 6 deletions src/AsyncMessageSender.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,9 @@
interface AsyncMessageSender
{

/**
* @param \AsyncConnection\AsyncConnectionWriter $writer
* @param mixed $message
* @return \React\Promise\ExtendedPromiseInterface
*/
public function sendMessage(
AsyncConnectionWriter $writer,
$message
AsyncMessage $message
): \React\Promise\ExtendedPromiseInterface;

}
21 changes: 21 additions & 0 deletions src/SimpleAsyncMessage.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php declare(strict_types = 1);

namespace AsyncConnection;

class SimpleAsyncMessage extends \Consistence\ObjectPrototype implements AsyncMessage
{

/** @var string */
private $text;

public function __construct(string $text)
{
$this->text = $text;
}

public function getText(): string
{
return $this->text;
}

}
12 changes: 5 additions & 7 deletions src/Smtp/AsyncSmtpMessageSender.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,16 @@
namespace AsyncConnection\Smtp;

use AsyncConnection\AsyncConnectionWriter;
use AsyncConnection\AsyncMessage;

class AsyncSmtpMessageSender extends \Consistence\ObjectPrototype implements \AsyncConnection\AsyncMessageSender
{

/**
* @param \AsyncConnection\AsyncConnectionWriter $writer
* @param mixed $message
* @return \React\Promise\ExtendedPromiseInterface
*/
public function sendMessage(AsyncConnectionWriter $writer, $message): \React\Promise\ExtendedPromiseInterface
public function sendMessage(AsyncConnectionWriter $writer, AsyncMessage $message): \React\Promise\ExtendedPromiseInterface
{
\Consistence\Type\Type::checkType($message, \Nette\Mail\Message::class);
if (!$message instanceof \Nette\Mail\Message) {
throw new \InvalidArgumentException('Only \Nette\Mail\Message is accepted');
}

$from = $message->getHeader('Return-Path') ?? key($message->getHeader('From'));

Expand Down
13 changes: 13 additions & 0 deletions src/Smtp/MailMessage.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php declare(strict_types = 1);

namespace AsyncConnection\Smtp;

class MailMessage extends \Nette\Mail\Message implements \AsyncConnection\AsyncMessage
{

public function getText(): string
{
return $this->getBody() ?? 'undefined';
}

}
26 changes: 13 additions & 13 deletions tests/AsyncMessageQueueManagerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ function (): \React\Promise\ExtendedPromiseInterface {
$this->exceptions = [];

$manager = $this->createManager();
$manager->send('a')->done(
$manager->send(new SimpleAsyncMessage('a'))->done(
function (): void {
$this->exceptions['first'] = false;
},
Expand All @@ -182,7 +182,7 @@ function (\Throwable $e): void {
$this->assertSame(1, $manager->getQueuedMessagesCount(), 'Unexpected queued messages count.');
$this->assertSame(0, $manager->getSentMessagesCount(), 'Unexpected sent messages count');

$manager->send('b')->done(
$manager->send(new SimpleAsyncMessage('b'))->done(
function (): void {
$this->exceptions['second'] = false;
},
Expand All @@ -195,8 +195,8 @@ function (\Throwable $e): void {
$firstMessage = array_shift($messages);
$lastMessage = array_pop($messages);
$this->assertSame(2, $manager->getQueuedMessagesCount(), 'Unexpected queued messages count.');
$this->assertSame('a', $firstMessage, 'Unexpected first emails subject');
$this->assertSame('b', $lastMessage, 'Unexpected second emails subject');
$this->assertSame('a', $firstMessage->getText(), 'Unexpected first emails subject');
$this->assertSame('b', $lastMessage->getText(), 'Unexpected second emails subject');

$this->loop->addPeriodicTimer($this->getTimerInterval(), function () use ($manager): void {
if (isset($this->exceptions['second'])) {
Expand All @@ -219,7 +219,7 @@ function (\Throwable $e): void {
$this->assertSame(1, $manager->getQueuedMessagesCount(), 'Unexpected queued messages count.');
$messages = $manager->getQueuedMessages();
$message = array_shift($messages);
$this->assertSame('b', $message);
$this->assertSame('b', $message->getText());
$this->assertSame(1, $manager->getSentMessagesCount(), 'Unexpected sent messages count');

} catch (\Throwable $e) {
Expand All @@ -243,7 +243,7 @@ public function testSendingWhenPreviousRequestSucceeded(): void

$manager = $this->createManager();

$manager->send('message')
$manager->send(new SimpleAsyncMessage('message'))
->done(
function (): void {
},
Expand All @@ -252,7 +252,7 @@ function (\Throwable $e): void {
}
);

$manager->send('message')
$manager->send(new SimpleAsyncMessage('message'))
->done(
function (): void {
$this->setException(false);
Expand Down Expand Up @@ -350,7 +350,7 @@ private function runSuccessfulSendingTest(
?\Closure $assertOnSuccess = null
): void
{
$manager->send($message)
$manager->send(new SimpleAsyncMessage($message))
->done(
function (): void {
$this->setException(false);
Expand All @@ -370,7 +370,7 @@ private function runFailedSendingTest(
\Closure $assertOnFail
): void
{
$manager->send($message)
$manager->send(new SimpleAsyncMessage($message))
->done(
function (): void {
$this->setException(false);
Expand Down Expand Up @@ -408,7 +408,7 @@ private function runDisconnectionTest(

$manager = $this->createManager($maxIntervalBetweenMessages, $maxMessagesPerConnection);

$manager->send('message')
$manager->send(new SimpleAsyncMessage('message'))
->then(
function () use ($manager, $maxIntervalBetweenMessages): void {
try {
Expand All @@ -418,7 +418,7 @@ function () use ($manager, $maxIntervalBetweenMessages): void {
sleep($maxIntervalBetweenMessages + 1);
}

$manager->send('message')
$manager->send(new SimpleAsyncMessage('message'))
->done(
function (): void {
$this->setException(false);
Expand Down Expand Up @@ -448,7 +448,7 @@ function (\Throwable $e): void {
private function runTwoRequestsTest(\Closure $asserts): void
{
$manager = $this->createManager();
$manager->send('message')
$manager->send(new SimpleAsyncMessage('message'))
->done(
function (): void {
$this->exceptions['first'] = false;
Expand All @@ -458,7 +458,7 @@ function (\Throwable $e): void {
}
);

$manager->send('message')
$manager->send(new SimpleAsyncMessage('message'))
->done(
function (): void {
$this->exceptions['second'] = false;
Expand Down
4 changes: 2 additions & 2 deletions tests/Smtp/AsyncSmtpMailerIntegrationTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -81,11 +81,11 @@ private function getManager(): AsyncMessageQueueManager
);
}

private function getMessage(string $subject): \Nette\Mail\Message
private function getMessage(string $subject): \AsyncConnection\Smtp\MailMessage
{
$settings = $this->getSettings();

$message = new \Nette\Mail\Message();
$message = new MailMessage();
$message->setFrom($settings->getEmailFrom());
$message->setSubject($subject);
$message->setHeader('To', [$settings->getTestInboxSettings()->getUsername() => null]);
Expand Down
8 changes: 4 additions & 4 deletions tests/Smtp/AsyncSmtpMessageSenderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ public function testMultipleRecipients(): void
}

private function runSuccessfulSendingTest(
\Nette\Mail\Message $message,
MailMessage $message,
?\Closure $assertOnSuccess = null
): void
{
Expand All @@ -120,7 +120,7 @@ function (\Throwable $exception): void {
}

private function runFailedSendingTest(
\Nette\Mail\Message $message,
MailMessage $message,
string $errorMessage,
\Closure $assertOnFail
): void
Expand All @@ -139,9 +139,9 @@ function (\Throwable $exception): void {
$this->runFailedTest($this->loop, $assertOnFail, $errorMessage);
}

private function createMessage(?string $subject = 'TEST'): \Nette\Mail\Message
private function createMessage(?string $subject = 'TEST'): MailMessage
{
$message = new \Nette\Mail\Message();
$message = new MailMessage();
$message->setFrom('test@slevomat.cz');
$message->setSubject($subject);
$message->setHeader('To', ['test@seznam.cz' => null]);
Expand Down

0 comments on commit a87dfd3

Please sign in to comment.