Исправления в сообщениях, починины тесты чтение/запись версии, начал тесты сообщений и фото.

This commit is contained in:
tarashyanskiy 2021-03-01 23:28:18 +08:00
parent 701082644e
commit d4014a7e65
7 changed files with 310 additions and 29 deletions

View File

@ -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)) {
// Идентификатор // Идентификатор

View File

@ -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)
};
}
/** /**
* Получить информацию о сообщении * Получить информацию о сообщении
* *

View File

@ -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, [

View File

@ -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);
//}
} }

View File

@ -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), 'Ошибка при деинициализации робота');
}
}

View File

@ -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, 'Не удалось прочитать версию');
} }
} }

View File

@ -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, 'Не удалось прочитать версию');
} }
} }