SendMessage method add recipient

This commit is contained in:
Alex
2025-07-13 15:01:05 +03:00
parent c8f87c70b6
commit 1ca860604c
7 changed files with 100 additions and 2 deletions
+12
View File
@@ -0,0 +1,12 @@
<?php
declare(strict_types=1);
namespace BushlanovDev\MaxMessengerBot\Enums;
enum ChatType: string
{
case Dialog = 'dialog';
case Chat = 'chat';
case Channel = 'channel';
}
+4
View File
@@ -10,10 +10,14 @@ namespace BushlanovDev\MaxMessengerBot\Models;
final readonly class Message extends AbstractModel
{
/**
* @param int $timestamp Unix-time when message was created.
* @param MessageBody $body Body of created message. Text + attachments.
* @param Recipient $recipient Message recipient. Could be user or chat.
*/
public function __construct(
public int $timestamp,
public MessageBody $body,
public Recipient $recipient,
) {
}
}
+25
View File
@@ -0,0 +1,25 @@
<?php
declare(strict_types=1);
namespace BushlanovDev\MaxMessengerBot\Models;
use BushlanovDev\MaxMessengerBot\Enums\ChatType;
/**
* Message recipient. Could be user or chat.
*/
final readonly class Recipient extends AbstractModel
{
/**
* @param ChatType $chatType Chat type (dialog, chat or channel).
* @param int|null $userId User identifier, if message was sent to user.
* @param int|null $chatId Chat identifier.
*/
public function __construct(
public ChatType $chatType,
public ?int $userId,
public ?int $chatId,
) {
}
}
+5 -2
View File
@@ -13,6 +13,7 @@ use BushlanovDev\MaxMessengerBot\ModelFactory;
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;
@@ -30,6 +31,7 @@ use ReflectionClass;
#[UsesClass(Subscription::class)]
#[UsesClass(Message::class)]
#[UsesClass(MessageBody::class)]
#[UsesClass(Recipient::class)]
final class ApiTest extends TestCase
{
private MockObject&ClientApiInterface $clientMock;
@@ -242,9 +244,10 @@ final class ApiTest extends TestCase
$apiResponse = [
'message' => [
'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']);
+9
View File
@@ -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);
}
}
+10
View File
@@ -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();
+35
View File
@@ -0,0 +1,35 @@
<?php
declare(strict_types=1);
namespace BushlanovDev\MaxMessengerBot\Tests\Models;
use BushlanovDev\MaxMessengerBot\Models\Recipient;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Test;
use PHPUnit\Framework\TestCase;
#[CoversClass(Recipient::class)]
class RecipientTest extends TestCase
{
#[Test]
public function canBeCreatedFromArray(): void
{
$data = [
'chat_type' => '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);
}
}