Added sendMessage method

This commit is contained in:
Alex
2025-07-12 21:39:16 +03:00
parent 0c91886ff0
commit c8f87c70b6
10 changed files with 297 additions and 3 deletions
+58
View File
@@ -7,9 +7,12 @@ namespace BushlanovDev\MaxMessengerBot\Tests;
use BushlanovDev\MaxMessengerBot\Api;
use BushlanovDev\MaxMessengerBot\Client;
use BushlanovDev\MaxMessengerBot\ClientApiInterface;
use BushlanovDev\MaxMessengerBot\Enums\MessageFormat;
use BushlanovDev\MaxMessengerBot\Enums\UpdateType;
use BushlanovDev\MaxMessengerBot\ModelFactory;
use BushlanovDev\MaxMessengerBot\Models\BotInfo;
use BushlanovDev\MaxMessengerBot\Models\Message;
use BushlanovDev\MaxMessengerBot\Models\MessageBody;
use BushlanovDev\MaxMessengerBot\Models\Result;
use BushlanovDev\MaxMessengerBot\Models\Subscription;
use PHPUnit\Framework\Attributes\CoversClass;
@@ -25,6 +28,8 @@ use ReflectionClass;
#[UsesClass(Client::class)]
#[UsesClass(BotInfo::class)]
#[UsesClass(Subscription::class)]
#[UsesClass(Message::class)]
#[UsesClass(MessageBody::class)]
final class ApiTest extends TestCase
{
private MockObject&ClientApiInterface $clientMock;
@@ -214,4 +219,57 @@ final class ApiTest extends TestCase
$result = $this->api->unsubscribe($url);
$this->assertSame($expectedResultObject, $result);
}
#[Test]
public function sendMessageBuildsCorrectRequestForAllParameters(): void
{
$chatId = 123456;
$text = 'Hello, **world**!';
$format = MessageFormat::Markdown;
$notify = false;
$disableLinkPreview = true;
$expectedQuery = [
'chat_id' => $chatId,
'disable_link_preview' => $disableLinkPreview,
];
$expectedBody = [
'text' => $text,
'format' => $format->value,
'notify' => $notify,
];
$apiResponse = [
'message' => [
'body' => ['mid' => 'mid.456.xyz', 'seq' => 101, 'text' => $text],
'timestamp' => time(),
]
];
$expectedMessageObject = Message::fromArray($apiResponse['message']);
$this->clientMock
->expects($this->once())
->method('request')
->with('POST', '/messages', $expectedQuery, $expectedBody)
->willReturn($apiResponse);
$this->modelFactoryMock
->expects($this->once())
->method('createMessage')
->with($apiResponse['message'])
->willReturn($expectedMessageObject);
$result = $this->api->sendMessage(
null,
$chatId,
$text,
$format,
$notify,
$disableLinkPreview,
);
$this->assertSame($expectedMessageObject, $result);
}
}
+21
View File
@@ -9,6 +9,8 @@ use BushlanovDev\MaxMessengerBot\Enums\UpdateType;
use BushlanovDev\MaxMessengerBot\ModelFactory;
use BushlanovDev\MaxMessengerBot\Models\BotCommand;
use BushlanovDev\MaxMessengerBot\Models\BotInfo;
use BushlanovDev\MaxMessengerBot\Models\Message;
use BushlanovDev\MaxMessengerBot\Models\MessageBody;
use BushlanovDev\MaxMessengerBot\Models\Result;
use BushlanovDev\MaxMessengerBot\Models\Subscription;
use PHPUnit\Framework\Attributes\CoversClass;
@@ -22,6 +24,8 @@ use PHPUnit\Framework\TestCase;
#[UsesClass(Result::class)]
#[UsesClass(Subscription::class)]
#[UsesClass(ArrayOf::class)]
#[UsesClass(Message::class)]
#[UsesClass(MessageBody::class)]
final class ModelFactoryTest extends TestCase
{
private ModelFactory $factory;
@@ -134,4 +138,21 @@ final class ModelFactoryTest extends TestCase
$this->assertInstanceOf(Subscription::class, $subscriptions[0]);
$this->assertSame(UpdateType::MessageCreated, $subscriptions[0]->updateTypes[0]);
}
#[Test]
public function createMessage(): void
{
$rawData = [
'body' => [
'mid' => 'mid.456.xyz',
'seq' => 101,
'text' => 'Hello, **world**!',
],
];
$message = $this->factory->createMessage($rawData);
$this->assertInstanceOf(Message::class, $message);
$this->assertInstanceOf(MessageBody::class, $message->body);
}
}
+58
View File
@@ -0,0 +1,58 @@
<?php
declare(strict_types=1);
namespace BushlanovDev\MaxMessengerBot\Tests\Models;
use BushlanovDev\MaxMessengerBot\Models\MessageBody;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Test;
use PHPUnit\Framework\TestCase;
#[CoversClass(MessageBody::class)]
final class MessageBodyTest extends TestCase
{
#[Test]
public function canBeCreatedFromArrayWithAllData(): void
{
$data = [
'mid' => 'mid.456.xyz',
'seq' => 101,
'text' => 'Hello, **world**!',
];
$messageBody = MessageBody::fromArray($data);
$this->assertInstanceOf(MessageBody::class, $messageBody);
$this->assertSame($data['mid'], $messageBody->mid);
$this->assertSame($data['seq'], $messageBody->seq);
$this->assertSame($data['text'], $messageBody->text);
$array = $messageBody->toArray();
$this->assertIsArray($array);
$this->assertSame($data, $array);
}
#[Test]
public function canBeCreatedFromArrayWithOptionalDataNull(): void
{
$data = [
'mid' => 'mid.456.xyz',
'seq' => 101,
'text' => null,
];
$messageBody = MessageBody::fromArray($data);
$this->assertInstanceOf(MessageBody::class, $messageBody);
$this->assertSame($data['mid'], $messageBody->mid);
$this->assertSame($data['seq'], $messageBody->seq);
$this->assertNull($messageBody->text);
$array = $messageBody->toArray();
$this->assertIsArray($array);
$this->assertSame($data, $array);
}
}
+39
View File
@@ -0,0 +1,39 @@
<?php
declare(strict_types=1);
namespace BushlanovDev\MaxMessengerBot\Tests\Models;
use BushlanovDev\MaxMessengerBot\Models\Message;
use BushlanovDev\MaxMessengerBot\Models\MessageBody;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Test;
use PHPUnit\Framework\Attributes\UsesClass;
use PHPUnit\Framework\TestCase;
#[CoversClass(Message::class)]
#[UsesClass(MessageBody::class)]
final class MessageTest extends TestCase
{
#[Test]
public function canBeCreatedFromArrayWithAllData(): void
{
$data = [
'body' => [
'mid' => 'mid.456.xyz',
'seq' => 101,
'text' => 'Hello, **world**!',
],
];
$message = Message::fromArray($data);
$this->assertInstanceOf(Message::class, $message);
$this->assertInstanceOf(MessageBody::class, $message->body);
$array = $message->toArray();
$this->assertIsArray($array);
$this->assertSame($data, $array);
}
}