From 1ca860604cb2a1d5424856effc2b1a3910ccb3e2 Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 13 Jul 2025 15:01:05 +0300 Subject: [PATCH] SendMessage method add recipient --- src/Enums/ChatType.php | 12 ++++++++++++ src/Models/Message.php | 4 ++++ src/Models/Recipient.php | 25 ++++++++++++++++++++++++ tests/ApiTest.php | 7 +++++-- tests/ModelFactoryTest.php | 9 +++++++++ tests/Models/MessageTest.php | 10 ++++++++++ tests/Models/RecipientTest.php | 35 ++++++++++++++++++++++++++++++++++ 7 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 src/Enums/ChatType.php create mode 100644 src/Models/Recipient.php create mode 100644 tests/Models/RecipientTest.php diff --git a/src/Enums/ChatType.php b/src/Enums/ChatType.php new file mode 100644 index 0000000..2d028c3 --- /dev/null +++ b/src/Enums/ChatType.php @@ -0,0 +1,12 @@ + [ - 'body' => ['mid' => 'mid.456.xyz', 'seq' => 101, 'text' => $text], 'timestamp' => time(), - ] + 'body' => ['mid' => 'mid.456.xyz', 'seq' => 101, 'text' => $text], + 'recipient' => ['chat_type' => 'dialog', 'user_id' => 123, 'chat_id' => null], + ], ]; $expectedMessageObject = Message::fromArray($apiResponse['message']); diff --git a/tests/ModelFactoryTest.php b/tests/ModelFactoryTest.php index 5c9861e..38488ba 100644 --- a/tests/ModelFactoryTest.php +++ b/tests/ModelFactoryTest.php @@ -11,6 +11,7 @@ use BushlanovDev\MaxMessengerBot\Models\BotCommand; use BushlanovDev\MaxMessengerBot\Models\BotInfo; use BushlanovDev\MaxMessengerBot\Models\Message; use BushlanovDev\MaxMessengerBot\Models\MessageBody; +use BushlanovDev\MaxMessengerBot\Models\Recipient; use BushlanovDev\MaxMessengerBot\Models\Result; use BushlanovDev\MaxMessengerBot\Models\Subscription; use PHPUnit\Framework\Attributes\CoversClass; @@ -26,6 +27,7 @@ use PHPUnit\Framework\TestCase; #[UsesClass(ArrayOf::class)] #[UsesClass(Message::class)] #[UsesClass(MessageBody::class)] +#[UsesClass(Recipient::class)] final class ModelFactoryTest extends TestCase { private ModelFactory $factory; @@ -143,16 +145,23 @@ final class ModelFactoryTest extends TestCase public function createMessage(): void { $rawData = [ + 'timestamp' => time(), 'body' => [ 'mid' => 'mid.456.xyz', 'seq' => 101, 'text' => 'Hello, **world**!', ], + 'recipient' => [ + 'chat_type' => 'dialog', + 'user_id' => 123, + 'chat_id' => null, + ], ]; $message = $this->factory->createMessage($rawData); $this->assertInstanceOf(Message::class, $message); $this->assertInstanceOf(MessageBody::class, $message->body); + $this->assertInstanceOf(Recipient::class, $message->recipient); } } diff --git a/tests/Models/MessageTest.php b/tests/Models/MessageTest.php index 35450ad..5b65f57 100644 --- a/tests/Models/MessageTest.php +++ b/tests/Models/MessageTest.php @@ -6,6 +6,7 @@ namespace BushlanovDev\MaxMessengerBot\Tests\Models; use BushlanovDev\MaxMessengerBot\Models\Message; use BushlanovDev\MaxMessengerBot\Models\MessageBody; +use BushlanovDev\MaxMessengerBot\Models\Recipient; use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\Attributes\UsesClass; @@ -13,23 +14,32 @@ use PHPUnit\Framework\TestCase; #[CoversClass(Message::class)] #[UsesClass(MessageBody::class)] +#[UsesClass(Recipient::class)] final class MessageTest extends TestCase { #[Test] public function canBeCreatedFromArrayWithAllData(): void { $data = [ + 'timestamp' => time(), 'body' => [ 'mid' => 'mid.456.xyz', 'seq' => 101, 'text' => 'Hello, **world**!', ], + 'recipient' => [ + 'chat_type' => 'dialog', + 'user_id' => 123, + 'chat_id' => null, + ], ]; $message = Message::fromArray($data); $this->assertInstanceOf(Message::class, $message); + $this->assertSame($data['timestamp'], $message->timestamp); $this->assertInstanceOf(MessageBody::class, $message->body); + $this->assertInstanceOf(Recipient::class, $message->recipient); $array = $message->toArray(); diff --git a/tests/Models/RecipientTest.php b/tests/Models/RecipientTest.php new file mode 100644 index 0000000..ec3689f --- /dev/null +++ b/tests/Models/RecipientTest.php @@ -0,0 +1,35 @@ + 'chat', + 'chat_id' => 123, + ]; + + $receipt = Recipient::fromArray($data); + + $this->assertInstanceOf(Recipient::class, $receipt); + $this->assertSame($data['chat_type'], $receipt->chatType->value); + $this->assertSame($data['chat_id'], $receipt->chatId); + + $array = $receipt->toArray(); + + $this->assertIsArray($array); + unset($array['user_id']); + $this->assertSame($data, $array); + } +}