Исправления в сообщениях, починины тесты чтение/запись версии, начал тесты сообщений и фото.
This commit is contained in:
parent
701082644e
commit
d4014a7e65
|
@ -93,7 +93,7 @@ class api implements ArrayAccess
|
||||||
*
|
*
|
||||||
* @see hood\vk\api\methods\messages Сообщения
|
* @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)) {
|
if (is_int($destination)) {
|
||||||
// Идентификатор
|
// Идентификатор
|
||||||
|
|
|
@ -4,6 +4,9 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace hood\vk\api\methods;
|
namespace hood\vk\api\methods;
|
||||||
|
|
||||||
|
use Exception;
|
||||||
|
|
||||||
|
use hood\accounts\vk;
|
||||||
use hood\vk\robots\robot;
|
use hood\vk\robots\robot;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -26,26 +29,77 @@ final class messages extends method
|
||||||
*/
|
*/
|
||||||
protected int $mode = 1;
|
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 robot $robot Робот
|
||||||
* @param string $message Текст
|
|
||||||
* @param int|string|array|null $destination Получатель
|
|
||||||
* @param array $attachments Вложения
|
|
||||||
*
|
|
||||||
* @return self
|
|
||||||
*/
|
*/
|
||||||
public function __construct(
|
public function __construct(
|
||||||
protected robot $robot,
|
protected robot $robot
|
||||||
protected string $message,
|
|
||||||
protected int|string|array|null $destination = null,
|
|
||||||
protected array $attachments = []
|
|
||||||
) {
|
) {
|
||||||
// Отправка, если все параметры инициализированы
|
}
|
||||||
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);
|
//var_dump($attachments);
|
||||||
if (!empty($this->attachments)) {
|
if (!empty($this->attachments)) {
|
||||||
// Если есть вложения
|
// Если есть вложения
|
||||||
//echo 'lol';
|
|
||||||
$this->robot->api['attachment'] = implode(',', $this->attachments);
|
$this->robot->api['attachment'] = implode(',', $this->attachments);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,6 +186,15 @@ final class messages extends method
|
||||||
return (array) $request;
|
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 фото
|
* $img фото
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public function get_photo(robot $robot, $img)
|
public function get_photo(robot $robot, $img) //Добавить проверку формата фото
|
||||||
{
|
{
|
||||||
// Реиницилазиция
|
// Реиницилазиция
|
||||||
$this->robot->api->reinit();
|
$this->robot->api->reinit();
|
||||||
|
@ -225,13 +225,10 @@ final class photos extends method
|
||||||
$this->robot->api['group_id'] = $robot->id;
|
$this->robot->api['group_id'] = $robot->id;
|
||||||
$this->robot->api['peer_id'] = 0;
|
$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']
|
||||||
$this->url = json_decode($robot->browser->request('POST', 'photos.getMessagesUploadServer', [
|
])->getBody()->getContents())->response->upload_url;
|
||||||
'form_params' => $this->robot->api['settings']
|
|
||||||
])->getBody()->getContents())->response->upload_url;
|
|
||||||
}
|
|
||||||
|
|
||||||
//загрузить
|
//загрузить
|
||||||
$response = json_decode($robot->browser->request('POST', $this->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), 'Ошибка при деинициализации робота');
|
$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;
|
$key = self::$robot->key;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Чтение api
|
||||||
|
*/
|
||||||
|
public function testRobotGroupReadApi(): void
|
||||||
|
{
|
||||||
|
$this->expectExceptionMessage('Ключ не инициализирован');
|
||||||
|
|
||||||
|
$api = self::$robot->api;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @testdox Запись версии API
|
* @testdox Запись версии API
|
||||||
*/
|
*/
|
||||||
|
@ -232,17 +242,21 @@ final class groupTest extends TestCase
|
||||||
{
|
{
|
||||||
// Проверка выброса исключения
|
// Проверка выброса исключения
|
||||||
$this->expectExceptionMessage('Запрещено перезаписывать версию API');
|
$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
|
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('Запрещено перезаписывать версию 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
|
public function testRobotGroupReadVersion(): void
|
||||||
{
|
{
|
||||||
|
// Проверка выброса исключения
|
||||||
|
$this->expectExceptionMessage('Ключ не инициализирован');
|
||||||
|
|
||||||
// Проверка
|
// Проверка
|
||||||
$this->assertNotNull(self::$robot->version, 'Не удалось прочитать версию');
|
$this->assertNotNull(self::$robot->api->version, 'Не удалось прочитать версию');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue