mirror of
https://github.com/BushlanovDev/max-bot-api-client-php.git
synced 2026-08-21 19:43:50 +00:00
SendMessage method add sender
This commit is contained in:
@@ -13,11 +13,15 @@ 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.
|
||||
* @param Sender|null $sender User who sent this message. Can be null if message has been posted on behalf of a channel.
|
||||
* @param string|null $url Message public URL. Can be null for dialogs or non-public chats/channels.
|
||||
*/
|
||||
public function __construct(
|
||||
public int $timestamp,
|
||||
public MessageBody $body,
|
||||
public Recipient $recipient,
|
||||
public ?Sender $sender,
|
||||
public ?string $url,
|
||||
) {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace BushlanovDev\MaxMessengerBot\Models;
|
||||
|
||||
/**
|
||||
* User who sent this message.
|
||||
*/
|
||||
final readonly class Sender extends AbstractModel
|
||||
{
|
||||
/**
|
||||
* @param int $userId Users identifier.
|
||||
* @param string $firstName Users first name.
|
||||
* @param string|null $lastName Users last name.
|
||||
* @param string|null $username Unique public user name. Can be null if user is not accessible or it is not set.
|
||||
* @param bool $isBot Is the user a bot.
|
||||
* @param int $lastActivityTime Time of last user activity in Max (Unix timestamp in milliseconds). Can be outdated if user disabled its "online" status in settings.
|
||||
*/
|
||||
public function __construct(
|
||||
public int $userId,
|
||||
public string $firstName,
|
||||
public ?string $lastName,
|
||||
public ?string $username,
|
||||
public bool $isBot,
|
||||
public int $lastActivityTime,
|
||||
) {
|
||||
}
|
||||
}
|
||||
@@ -15,6 +15,7 @@ use BushlanovDev\MaxMessengerBot\Models\Message;
|
||||
use BushlanovDev\MaxMessengerBot\Models\MessageBody;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Recipient;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Result;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Sender;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Subscription;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
use PHPUnit\Framework\Attributes\Test;
|
||||
@@ -32,6 +33,7 @@ use ReflectionClass;
|
||||
#[UsesClass(Message::class)]
|
||||
#[UsesClass(MessageBody::class)]
|
||||
#[UsesClass(Recipient::class)]
|
||||
#[UsesClass(Sender::class)]
|
||||
final class ApiTest extends TestCase
|
||||
{
|
||||
private MockObject&ClientApiInterface $clientMock;
|
||||
@@ -247,6 +249,15 @@ final class ApiTest extends TestCase
|
||||
'timestamp' => time(),
|
||||
'body' => ['mid' => 'mid.456.xyz', 'seq' => 101, 'text' => $text],
|
||||
'recipient' => ['chat_type' => 'dialog', 'user_id' => 123, 'chat_id' => null],
|
||||
'sender' => [
|
||||
'user_id' => 123,
|
||||
'first_name' => 'John',
|
||||
'last_name' => 'Doe',
|
||||
'username' => 'johndoe',
|
||||
'is_bot' => false,
|
||||
'last_activity_time' => 1678886400000,
|
||||
],
|
||||
'url' => 'https://max.ru/message/123',
|
||||
],
|
||||
];
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@ use BushlanovDev\MaxMessengerBot\Models\Message;
|
||||
use BushlanovDev\MaxMessengerBot\Models\MessageBody;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Recipient;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Result;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Sender;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Subscription;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
use PHPUnit\Framework\Attributes\Test;
|
||||
@@ -28,6 +29,7 @@ use PHPUnit\Framework\TestCase;
|
||||
#[UsesClass(Message::class)]
|
||||
#[UsesClass(MessageBody::class)]
|
||||
#[UsesClass(Recipient::class)]
|
||||
#[UsesClass(Sender::class)]
|
||||
final class ModelFactoryTest extends TestCase
|
||||
{
|
||||
private ModelFactory $factory;
|
||||
@@ -156,6 +158,15 @@ final class ModelFactoryTest extends TestCase
|
||||
'user_id' => 123,
|
||||
'chat_id' => null,
|
||||
],
|
||||
'sender' =>[
|
||||
'user_id' => 123,
|
||||
'first_name' => 'John',
|
||||
'last_name' => 'Doe',
|
||||
'username' => 'johndoe',
|
||||
'is_bot' => false,
|
||||
'last_activity_time' => 1678886400000,
|
||||
],
|
||||
'url' => 'https://max.ru/message/123',
|
||||
];
|
||||
|
||||
$message = $this->factory->createMessage($rawData);
|
||||
@@ -163,5 +174,6 @@ final class ModelFactoryTest extends TestCase
|
||||
$this->assertInstanceOf(Message::class, $message);
|
||||
$this->assertInstanceOf(MessageBody::class, $message->body);
|
||||
$this->assertInstanceOf(Recipient::class, $message->recipient);
|
||||
$this->assertInstanceOf(Sender::class, $message->sender);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ namespace BushlanovDev\MaxMessengerBot\Tests\Models;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Message;
|
||||
use BushlanovDev\MaxMessengerBot\Models\MessageBody;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Recipient;
|
||||
use BushlanovDev\MaxMessengerBot\Models\Sender;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
use PHPUnit\Framework\Attributes\Test;
|
||||
use PHPUnit\Framework\Attributes\UsesClass;
|
||||
@@ -15,6 +16,7 @@ use PHPUnit\Framework\TestCase;
|
||||
#[CoversClass(Message::class)]
|
||||
#[UsesClass(MessageBody::class)]
|
||||
#[UsesClass(Recipient::class)]
|
||||
#[UsesClass(Sender::class)]
|
||||
final class MessageTest extends TestCase
|
||||
{
|
||||
#[Test]
|
||||
@@ -32,6 +34,15 @@ final class MessageTest extends TestCase
|
||||
'user_id' => 123,
|
||||
'chat_id' => null,
|
||||
],
|
||||
'sender' =>[
|
||||
'user_id' => 123,
|
||||
'first_name' => 'John',
|
||||
'last_name' => 'Doe',
|
||||
'username' => 'johndoe',
|
||||
'is_bot' => false,
|
||||
'last_activity_time' => 1678886400000,
|
||||
],
|
||||
'url' => 'https://max.ru/message/123',
|
||||
];
|
||||
|
||||
$message = Message::fromArray($data);
|
||||
@@ -40,6 +51,8 @@ final class MessageTest extends TestCase
|
||||
$this->assertSame($data['timestamp'], $message->timestamp);
|
||||
$this->assertInstanceOf(MessageBody::class, $message->body);
|
||||
$this->assertInstanceOf(Recipient::class, $message->recipient);
|
||||
$this->assertInstanceOf(Sender::class, $message->sender);
|
||||
$this->assertSame($data['url'], $message->url);
|
||||
|
||||
$array = $message->toArray();
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ use PHPUnit\Framework\Attributes\Test;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
#[CoversClass(Recipient::class)]
|
||||
class RecipientTest extends TestCase
|
||||
final class RecipientTest extends TestCase
|
||||
{
|
||||
#[Test]
|
||||
public function canBeCreatedFromArray(): void
|
||||
|
||||
@@ -13,7 +13,7 @@ use PHPUnit\Framework\TestCase;
|
||||
final class ResultTest extends TestCase
|
||||
{
|
||||
#[Test]
|
||||
public function canBeCreatedFromArray(): void
|
||||
public function canBeCreatedFromArrayWithNullMessage(): void
|
||||
{
|
||||
$data = [
|
||||
'success' => true,
|
||||
@@ -32,7 +32,7 @@ final class ResultTest extends TestCase
|
||||
}
|
||||
|
||||
#[Test]
|
||||
public function canBeCreatedFromArrayWithNullMessage(): void
|
||||
public function canBeCreatedFromArray(): void
|
||||
{
|
||||
$data = [
|
||||
'success' => false,
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace BushlanovDev\MaxMessengerBot\Tests\Models;
|
||||
|
||||
use BushlanovDev\MaxMessengerBot\Models\Sender;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
use PHPUnit\Framework\Attributes\Test;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
#[CoversClass(Sender::class)]
|
||||
final class SenderTest extends TestCase
|
||||
{
|
||||
#[Test]
|
||||
public function canBeCreatedFromArray(): void
|
||||
{
|
||||
$data = [
|
||||
'user_id' => 123,
|
||||
'first_name' => 'John',
|
||||
'last_name' => 'Doe',
|
||||
'username' => 'johndoe',
|
||||
'is_bot' => false,
|
||||
'last_activity_time' => 1678886400000,
|
||||
];
|
||||
|
||||
$sender = Sender::fromArray($data);
|
||||
|
||||
$this->assertInstanceOf(Sender::class, $sender);
|
||||
$this->assertSame($data['user_id'], $sender->userId);
|
||||
$this->assertSame($data['first_name'], $sender->firstName);
|
||||
$this->assertSame($data['last_name'], $sender->lastName);
|
||||
$this->assertSame($data['username'], $sender->username);
|
||||
$this->assertSame($data['is_bot'], $sender->isBot);
|
||||
$this->assertSame($data['last_activity_time'], $sender->lastActivityTime);
|
||||
|
||||
$array = $sender->toArray();
|
||||
|
||||
$this->assertIsArray($array);
|
||||
$this->assertSame($data, $array);
|
||||
}
|
||||
|
||||
#[Test]
|
||||
public function canBeCreatedFromArrayWithOptionalDataNull(): void
|
||||
{
|
||||
$data = [
|
||||
'user_id' => 123,
|
||||
'first_name' => 'John',
|
||||
'is_bot' => false,
|
||||
'last_activity_time' => 1678886400000,
|
||||
];
|
||||
|
||||
$sender = Sender::fromArray($data);
|
||||
|
||||
$this->assertInstanceOf(Sender::class, $sender);
|
||||
$this->assertSame($data['user_id'], $sender->userId);
|
||||
$this->assertSame($data['first_name'], $sender->firstName);
|
||||
$this->assertNull($sender->lastName);
|
||||
$this->assertNull($sender->username);
|
||||
$this->assertSame($data['is_bot'], $sender->isBot);
|
||||
$this->assertSame($data['last_activity_time'], $sender->lastActivityTime);
|
||||
|
||||
$array = $sender->toArray();
|
||||
|
||||
$this->assertIsArray($array);
|
||||
unset($array['last_name']);
|
||||
unset($array['username']);
|
||||
$this->assertSame($data, $array);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user