Исправления в сообщениях, починины тесты чтение/запись версии, начал тесты сообщений и фото.
This commit is contained in:
parent
701082644e
commit
d4014a7e65
|
@ -93,7 +93,7 @@ class api implements ArrayAccess
|
|||
*
|
||||
* @see hood\vk\api\methods\messages Сообщения
|
||||
*/
|
||||
public function chooseDestination(string|array $destination): void
|
||||
public function chooseDestination(string|array|int $destination): void
|
||||
{
|
||||
if (is_int($destination)) {
|
||||
// Идентификатор
|
||||
|
|
|
@ -4,6 +4,9 @@ declare(strict_types=1);
|
|||
|
||||
namespace hood\vk\api\methods;
|
||||
|
||||
use Exception;
|
||||
|
||||
use hood\accounts\vk;
|
||||
use hood\vk\robots\robot;
|
||||
|
||||
/**
|
||||
|
@ -26,26 +29,77 @@ final class messages extends method
|
|||
*/
|
||||
protected int $mode = 1;
|
||||
|
||||
/**
|
||||
* @param int|string|array $destination Получатель
|
||||
*/
|
||||
protected int|string|array $destination;
|
||||
|
||||
/**
|
||||
* @param string|null $text Текст
|
||||
*/
|
||||
protected string|null $text = null;
|
||||
|
||||
/**
|
||||
* @param array $attachments Вложения
|
||||
*/
|
||||
protected array $attachments = [];
|
||||
|
||||
/**
|
||||
* Создать сообщение
|
||||
*
|
||||
* Если переданы все параметры, то сразу отправляет
|
||||
*
|
||||
* @param robot $robot Робот
|
||||
* @param string $message Текст
|
||||
* @param int|string|array|null $destination Получатель
|
||||
* @param array $attachments Вложения
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public function __construct(
|
||||
protected robot $robot,
|
||||
protected string $message,
|
||||
protected int|string|array|null $destination = null,
|
||||
protected array $attachments = []
|
||||
protected robot $robot
|
||||
) {
|
||||
// Отправка, если все параметры инициализированы
|
||||
return $this->send($destination);
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавить текст
|
||||
*
|
||||
* @param string $text Текст
|
||||
*/
|
||||
public function text(string $text): self
|
||||
{
|
||||
if (!isset($this->text)) {
|
||||
$this->text = $text;
|
||||
} else {
|
||||
$this->text .= $text;
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавить Фото
|
||||
*
|
||||
* @param $img Фото
|
||||
*/
|
||||
public function image($img): self
|
||||
{
|
||||
//загрузить фото
|
||||
$id = $this->robot->photo()->get_photo($img);
|
||||
|
||||
//добавить к вложениям
|
||||
$this->add($id);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавить вложения
|
||||
*
|
||||
* @param string|array $attachments Вложения
|
||||
*/
|
||||
public function add(string|array $attachments): self
|
||||
{
|
||||
if (is_array($attachments)) {
|
||||
$this->attachments = array_merge($this->attachments, $attachments);
|
||||
} else {
|
||||
array_push($this->attachments, $attachments);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -98,7 +152,6 @@ final class messages extends method
|
|||
//var_dump($attachments);
|
||||
if (!empty($this->attachments)) {
|
||||
// Если есть вложения
|
||||
//echo 'lol';
|
||||
$this->robot->api['attachment'] = implode(',', $this->attachments);
|
||||
}
|
||||
|
||||
|
@ -133,6 +186,15 @@ final class messages extends method
|
|||
return (array) $request;
|
||||
}
|
||||
|
||||
public function __get($name)
|
||||
{
|
||||
return match ($name) {
|
||||
'text' => $this->text ?? throw new Exception('Текст не задан'),
|
||||
'attachments' => !empty($this->attachments) ? $this->attachments : throw new Exception('Вложения не заданы'),
|
||||
default => throw new Exception('Свойство не найдено: ' . $name)
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить информацию о сообщении
|
||||
*
|
||||
|
|
|
@ -216,7 +216,7 @@ final class photos extends method
|
|||
* $img фото
|
||||
*/
|
||||
|
||||
public function get_photo(robot $robot, $img)
|
||||
public function get_photo(robot $robot, $img) //Добавить проверку формата фото
|
||||
{
|
||||
// Реиницилазиция
|
||||
$this->robot->api->reinit();
|
||||
|
@ -225,13 +225,10 @@ final class photos extends method
|
|||
$this->robot->api['group_id'] = $robot->id;
|
||||
$this->robot->api['peer_id'] = 0;
|
||||
|
||||
if (!isset($this->url)) {
|
||||
|
||||
// Получить адрес сервера для загрузки фотографии в личное сообщение
|
||||
$this->url = json_decode($robot->browser->request('POST', 'photos.getMessagesUploadServer', [
|
||||
'form_params' => $this->robot->api['settings']
|
||||
])->getBody()->getContents())->response->upload_url;
|
||||
}
|
||||
// Получить адрес сервера для загрузки фотографии в личное сообщение
|
||||
$this->url = json_decode($robot->browser->request('POST', 'photos.getMessagesUploadServer', [
|
||||
'form_params' => $this->robot->api['settings']
|
||||
])->getBody()->getContents())->response->upload_url;
|
||||
|
||||
//загрузить
|
||||
$response = json_decode($robot->browser->request('POST', $this->url, [
|
||||
|
|
|
@ -113,4 +113,92 @@ final class messagesTest extends TestCase
|
|||
// Проверка
|
||||
$this->assertEmpty(self::$core->get(self::$robot->id), 'Ошибка при деинициализации робота');
|
||||
}
|
||||
|
||||
/**
|
||||
* @testdox Чтение текста
|
||||
*/
|
||||
public function testReadText(): void
|
||||
{
|
||||
$this->expectExceptionMessage('Текст не задан');
|
||||
|
||||
self::$robot->message()->text;
|
||||
}
|
||||
|
||||
/**
|
||||
* @testdox Чтение вложений
|
||||
*/
|
||||
public function testReadAttachments(): void
|
||||
{
|
||||
$this->expectExceptionMessage('Вложения не заданы');
|
||||
|
||||
self::$robot->message()->attachments;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @testdox Добавление текста
|
||||
*/
|
||||
public function testWriteText() //: hood\vk\api\methods\messages
|
||||
{
|
||||
//self::$robot->key(self::$group_key);
|
||||
return self::$robot->message()->text('text');
|
||||
}
|
||||
|
||||
/**
|
||||
* @testdox Повторное добавление текста
|
||||
*
|
||||
* @depends testWriteText
|
||||
*/
|
||||
public function testWriteTextWhenHeIsAlreadyWrited($messages)
|
||||
{
|
||||
$messages->text('text');
|
||||
|
||||
$this->assertSame('text' . 'text', $messages->text);
|
||||
|
||||
return $messages;
|
||||
}
|
||||
|
||||
/**
|
||||
* @testdox Добавление массива вложений
|
||||
*
|
||||
* @depends testWriteTextWhenHeIsAlreadyWrited
|
||||
*/
|
||||
public function testAddAttAttachments($messages)
|
||||
{
|
||||
return $messages->add(['text']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @testdox Повторное добавление текста вложения
|
||||
*
|
||||
* @depends testAddAttAttachments
|
||||
*/
|
||||
public function testAddAttachmentsWhenTheyIsAlreadyWrited($messages)
|
||||
{
|
||||
//временный код
|
||||
$this->assertSame(['text', 'text'], $messages->add('text')->attachments);
|
||||
|
||||
return $messages;
|
||||
}
|
||||
|
||||
/**
|
||||
* @testdox Отправка сообщения
|
||||
*
|
||||
* @depends testAddAttachmentsWhenTheyIsAlreadyWrited
|
||||
*/
|
||||
//public function testSend($messages)
|
||||
//{
|
||||
//Проверка выбрса исключения
|
||||
//$this->expectExceptionMessage('Ключ не инициализирован');
|
||||
|
||||
//Отправка по идентификатору
|
||||
//$messages->send(self::$peer_id);
|
||||
|
||||
//Отправка по идентификаторам
|
||||
//$messages->send(self::$peer_ids);
|
||||
|
||||
//Отправка по домену
|
||||
//$messages->send(self::$domain);
|
||||
|
||||
//}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,116 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
use hood\vk\core;
|
||||
use hood\vk\robots\robot;
|
||||
use hood\vk\tests\settings;
|
||||
|
||||
use hood\accounts\vk as account;
|
||||
|
||||
/**
|
||||
* @testdox Фото
|
||||
*/
|
||||
final class photosTest extends TestCase
|
||||
{
|
||||
use settings;
|
||||
|
||||
/**
|
||||
* @var core $core Ядро фреймворка
|
||||
*/
|
||||
private static core $core;
|
||||
|
||||
/**
|
||||
* @var account $account Аккаунт
|
||||
*/
|
||||
protected static account $account;
|
||||
|
||||
/**
|
||||
* @var robot $robot Робот
|
||||
*/
|
||||
private static robot $robot;
|
||||
|
||||
/**
|
||||
* @testdox Инициализация аккаунта
|
||||
* @beforeClass
|
||||
*/
|
||||
public function testAccountInit(): void
|
||||
{
|
||||
// Проверка входных данных
|
||||
if (empty(self::$project_id)) {
|
||||
self::$markTestSkipped('Не найден идентификатор проекта');
|
||||
}
|
||||
|
||||
// Инициализация аккаунта
|
||||
self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, __DIR__ . '../../../accounts');
|
||||
|
||||
// Запись режима SSL-протокола
|
||||
self::$account->ssl = self::$ssl ?? true;
|
||||
|
||||
if (empty(self::$key)) {
|
||||
// Если не указан ключ
|
||||
|
||||
// Проверка входных данных
|
||||
if (empty(self::$login)) {
|
||||
self::$markTestSkipped('Не найден входной аккаунта');
|
||||
} else if (empty(self::$password)) {
|
||||
self::$markTestSkipped('Не найден пароль аккаунта');
|
||||
}
|
||||
|
||||
// Деаутентификация (на всякий случай)
|
||||
self::$account->deauth();
|
||||
|
||||
// Аутентификация и генерация ключа
|
||||
self::$key = self::$account->auth(self::$login, self::$password)->key(self::$project_id);
|
||||
}
|
||||
|
||||
$this->assertNotNull(self::$key, 'Ошибка при инициализации ключа аккаунта');
|
||||
}
|
||||
|
||||
/**
|
||||
* @testdox Деинициализация аккаунта
|
||||
* @afterClass
|
||||
*/
|
||||
public static function testAccountDeinit(): void
|
||||
{
|
||||
// Инициализация аккаунта
|
||||
self::$account = new account(empty(self::$id) ? rand(0, 10) : self::$id, __DIR__ . '../../../accounts');
|
||||
|
||||
// Деаутентификация
|
||||
self::$account->deauth();
|
||||
}
|
||||
|
||||
/**
|
||||
* @testdox Инициализация робота
|
||||
* @before
|
||||
*/
|
||||
public function testRobotGroupInit(): void
|
||||
{
|
||||
// Инициализация ядра
|
||||
self::$core = core::init();
|
||||
|
||||
// Сохранение количества роботов
|
||||
$count = self::$core->robots;
|
||||
|
||||
// Инициализация робота
|
||||
self::$robot = self::$core->group(empty(self::$group_id) ? rand(0, 10) : self::$group_id);
|
||||
|
||||
// Проверка
|
||||
$this->assertEquals(self::$core->robots, $count + 1, 'Ошибка при инициализации робота');
|
||||
}
|
||||
|
||||
/**
|
||||
* @testdox Деинициализация робота
|
||||
* @after
|
||||
*/
|
||||
public function testRobotGroupDeinit(): void
|
||||
{
|
||||
// Очистка реестра
|
||||
self::$core->delete();
|
||||
|
||||
// Проверка
|
||||
$this->assertEmpty(self::$core->get(self::$robot->id), 'Ошибка при деинициализации робота');
|
||||
}
|
||||
}
|
|
@ -225,6 +225,16 @@ final class groupTest extends TestCase
|
|||
$key = self::$robot->key;
|
||||
}
|
||||
|
||||
/**
|
||||
* @testdox Чтение api
|
||||
*/
|
||||
public function testRobotGroupReadApi(): void
|
||||
{
|
||||
$this->expectExceptionMessage('Ключ не инициализирован');
|
||||
|
||||
$api = self::$robot->api;
|
||||
}
|
||||
|
||||
/**
|
||||
* @testdox Запись версии API
|
||||
*/
|
||||
|
@ -232,17 +242,21 @@ final class groupTest extends TestCase
|
|||
{
|
||||
// Проверка выброса исключения
|
||||
$this->expectExceptionMessage('Запрещено перезаписывать версию API');
|
||||
$this->expectExceptionMessage('Ключ не инициализирован');
|
||||
|
||||
// Запись версии
|
||||
self::$robot->version = empty(self::$robot->version) ? rand(0, 10) : self::$robot->version;
|
||||
self::$robot->api->version = empty(self::$robot->api->version) ? rand(0, 10) : self::$robot->api->version;
|
||||
}
|
||||
|
||||
/**
|
||||
* @testdox Чтение версии
|
||||
* @testdox Чтение версии API
|
||||
*/
|
||||
public function testRobotGroupReadVersion(): void
|
||||
{
|
||||
// Проверка выброса исключения
|
||||
$this->expectExceptionMessage('Ключ не инициализирован');
|
||||
|
||||
// Проверка
|
||||
$this->assertNotNull(self::$robot->version, 'Не удалось прочитать версию');
|
||||
$this->assertNotNull(self::$robot->api->version, 'Не удалось прочитать версию');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -232,17 +232,21 @@ final class userTest extends TestCase
|
|||
{
|
||||
// Проверка выброса исключения
|
||||
$this->expectExceptionMessage('Запрещено перезаписывать версию API');
|
||||
$this->expectExceptionMessage('Ключ не инициализирован');
|
||||
|
||||
// Запись версии
|
||||
self::$robot->version = empty(self::$robot->version) ? rand(0, 10) : self::$robot->version;
|
||||
self::$robot->api->version = empty(self::$robot->api->version) ? rand(0, 10) : self::$robot->api->version;
|
||||
}
|
||||
|
||||
/**
|
||||
* @testdox Чтение версии
|
||||
* @testdox Чтение версии API
|
||||
*/
|
||||
public function testRobotGroupReadVersion(): void
|
||||
{
|
||||
// Проверка выброса исключения
|
||||
$this->expectExceptionMessage('Ключ не инициализирован');
|
||||
|
||||
// Проверка
|
||||
$this->assertNotNull(self::$robot->version, 'Не удалось прочитать версию');
|
||||
$this->assertNotNull(self::$robot->api->version, 'Не удалось прочитать версию');
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue