212 lines
6.0 KiB
PHP
212 lines
6.0 KiB
PHP
<?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 messagesTest 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, self::$path_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, self::$path_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), 'Ошибка при деинициализации робота');
|
||
}
|
||
|
||
/**
|
||
* @testdox Чтение текста
|
||
*/
|
||
public function testReadText(): void
|
||
{
|
||
// Проверка выброса исключения
|
||
$this->expectExceptionMessage('Текст не инициализирован');
|
||
|
||
// Чтение текста
|
||
self::$robot->message()->text;
|
||
}
|
||
|
||
/**
|
||
* @testdox Запись текста
|
||
*/
|
||
public function testWriteText(): void
|
||
{
|
||
// Запись текста
|
||
self::$robot->message()->text('text');
|
||
}
|
||
|
||
/**
|
||
* @testdox Запись текста (повторная)
|
||
*/
|
||
public function testWriteTextWhenHeIsAlreadyWrited(): void
|
||
{
|
||
// Запись текста
|
||
$message = self::$robot->message()->text('text');
|
||
|
||
// Повторная запись текста
|
||
$message->text('text');
|
||
|
||
// Проверка
|
||
$this->assertSame('texttext', $message->text);
|
||
}
|
||
|
||
/**
|
||
* @testdox Запись фото
|
||
*/
|
||
public function testWriteImage(): void
|
||
{
|
||
// Запись фото
|
||
$message = self::$robot->key(self::$group_key)->message()->image(self::$path_photo);
|
||
|
||
// Проверка
|
||
$this->assertNotEmpty($message->data);
|
||
}
|
||
|
||
/**
|
||
* @testdox Чтение Вложений
|
||
*/
|
||
public function testReadAttachments(): void
|
||
{
|
||
// Проверка выброса исключеия
|
||
$this->expectExceptionMessage('Вложения не инициализированны');
|
||
|
||
// Проверка
|
||
self::$robot->message()->data;
|
||
}
|
||
|
||
/**
|
||
* @testdox Запись вложений методом
|
||
*/
|
||
public function testWriteAttachments(): void
|
||
{
|
||
// Запись вложений
|
||
$message = self::$robot->message();
|
||
|
||
$message->attachments('Вложение');
|
||
|
||
// Проверка
|
||
$this->assertEquals(['Вложение'], $message->data);
|
||
}
|
||
|
||
/**
|
||
* @testdox Отправка текста
|
||
*/
|
||
public function testSend(): void
|
||
{
|
||
// Отправка сообщения
|
||
self::$robot->key(self::$group_key)->message('Тестовое сообщение')->send(self::$target_id);
|
||
}
|
||
|
||
/**
|
||
* @testdox Отправка фотографии
|
||
*/
|
||
public function testSendPhoto(): void
|
||
{
|
||
// Запись фото
|
||
$message = self::$robot->key(self::$group_key)->message()->image(self::$path_photo);
|
||
|
||
// Отправка сообщения
|
||
$message->send(self::$target_id);
|
||
}
|
||
}
|