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

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 Сообщения
*/
public function chooseDestination(string|array $destination): void
public function chooseDestination(string|array|int $destination): void
{
if (is_int($destination)) {
// Идентификатор

View File

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

View File

@ -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;
}
//загрузить
$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), 'Ошибка при деинициализации робота');
}
/**
* @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;
}
/**
* @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, 'Не удалось прочитать версию');
}
}

View File

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