188 lines
5.4 KiB
PHP
188 lines
5.4 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\vk\api\attachments;
|
||
|
||
use hood\accounts\vk as account;
|
||
|
||
/**
|
||
* @testdox Вложения
|
||
*/
|
||
final class attachmentsTest 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;
|
||
|
||
/**
|
||
* @var attachments $attachments Вложения
|
||
*/
|
||
private static attachments $attachments;
|
||
|
||
/**
|
||
* @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 Инициализация вложений
|
||
* @before
|
||
*/
|
||
public function testAttachmentsInit(): void
|
||
{
|
||
if (isset(self::$robot)) {
|
||
self::$attachments = new Attachments(self::$robot);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @testdox Чтение вложений
|
||
*/
|
||
public function testReadAttachments(): void
|
||
{
|
||
// Проверка
|
||
$this->assertNotNull(self::$attachments->attachments);
|
||
}
|
||
|
||
/**
|
||
* @testdox Запись вложения
|
||
*/
|
||
public function testWriteAttachment(): void
|
||
{
|
||
// Запись вложения
|
||
self::$attachments->attachment('text');
|
||
}
|
||
|
||
/**
|
||
* @testdox Запись вложения (повторная)
|
||
*/
|
||
public function testWriteAttachmentWhenItIsAlreadyWrited(): void
|
||
{
|
||
//Запись вложения
|
||
self::$attachments->attachment('text');
|
||
|
||
// Повторная запись вложения
|
||
self::$attachments->attachment('text');
|
||
|
||
// Проверка
|
||
$this->assertSame(['text', 'text'], self::$attachments->attachments);
|
||
}
|
||
|
||
/**
|
||
* @testdox Запись более 10 вложений
|
||
*/
|
||
public function testWriteAttachmentWhenLimitIsExceed()
|
||
{
|
||
// Проверка выброса исключения
|
||
$this->expectExceptionMessage('Превышен лимит вложений (10)');
|
||
|
||
//Запись вложений
|
||
self::$attachments->attachment('text', 'text', 'text', 'text', 'text', 'text', 'text', 'text', 'text', 'text', 'text');
|
||
}
|
||
|
||
/**
|
||
* @testdox Очистка вложений
|
||
*/
|
||
public function testClearAttachments(): void
|
||
{
|
||
// Очистка вложений
|
||
self::$attachments->clear();
|
||
}
|
||
}
|