diff --git a/hood/vk/system/api/api.php b/hood/vk/system/api/api.php index f67c78a..c4f14a6 100644 --- a/hood/vk/system/api/api.php +++ b/hood/vk/system/api/api.php @@ -62,8 +62,9 @@ class api implements ArrayAccess */ public function reinit(): array { - // Очистка - unset($this->settings); + // Реинициализация + //unset($this->settings); + $this->settings = []; try { $this->_init(); @@ -144,7 +145,9 @@ class api implements ArrayAccess */ public function offsetSet(mixed $offset, mixed $value): void { - if (isset($settings)) { + if ($offset == 'settings') { + !isset($this->settings) ? $this->settings = $value : throw new Exception('Запрещено перезаписывать настройки'); + } else if (isset($this->settings)) { $this->settings[$offset] = $value; } else { throw new Exception('Настройки не инициализированы'); @@ -156,7 +159,9 @@ class api implements ArrayAccess */ public function offsetGet(mixed $offset): mixed { - if (isset($settings)) { + if ($offset == 'settings' && isset($this->settings)) { + return $this->settings; + } else if (isset($this->settings)) { if (isset($this->settings[$offset])) { return $this->settings[$offset]; } else { @@ -172,7 +177,9 @@ class api implements ArrayAccess */ public function offsetExists(mixed $offset): bool { - if (isset($settings)) { + if ($offset == 'settings' && isset($this->settings)) { + return isset($this->settings); + } else if (isset($this->settings)) { return isset($this->settings[$offset]); } else { throw new Exception('Настройки не инициализированы'); @@ -184,7 +191,9 @@ class api implements ArrayAccess */ public function offsetUnset(mixed $offset): void { - if (isset($settings)) { + if ($offset == 'settings' && isset($this->settings)) { + unset($this->settings); + } else if (isset($this->settings)) { unset($this->settings[$offset]); } else { throw new Exception('Настройки не инициализированы'); diff --git a/hood/vk/system/api/attachments.php b/hood/vk/system/api/attachments.php new file mode 100644 index 0000000..566f1e7 --- /dev/null +++ b/hood/vk/system/api/attachments.php @@ -0,0 +1,75 @@ +attachments) + count($attachments) > 10) { + throw new Exception('Превышен лимит вложений (10)'); + } + + // Запись вложений + $this->attachments = array_merge($this->attachments, $attachments); + + return $this; + } + + /** + * Очистить вложения + */ + public function Clear(): self + { + // Очистка вложений + $this->attachments = []; + + return $this; + } + + /** + * Прочитать свойство + * + * @param string $name Название + * + * @return mixed + */ + public function __get(string $name): mixed + { + return match ($name) { + 'attachments' => $this->attachments, + default => throw new Exception('Свойство не найдено: ' . $name) + }; + } +} diff --git a/hood/vk/system/api/methods/messages.php b/hood/vk/system/api/methods/messages.php index 1ef0742..69e37d0 100644 --- a/hood/vk/system/api/methods/messages.php +++ b/hood/vk/system/api/methods/messages.php @@ -8,6 +8,7 @@ use Exception; use hood\accounts\vk; use hood\vk\robots\robot; +use hood\vk\api\attachments; /** * Сообщение @@ -29,20 +30,20 @@ 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 Вложения + * @var array Массив вложений */ - protected array $attachments = []; + protected array $attachments; + + /** + * @var attachments Вложения + */ + protected attachments $attachment; /** * Создать сообщение @@ -55,12 +56,15 @@ final class messages extends method } /** - * Добавить текст + * Записать текст * * @param string $text Текст + * + * @return self */ public function text(string $text): self { + // Записать текст if (!isset($this->text)) { $this->text = $text; } else { @@ -71,32 +75,47 @@ final class messages extends method } /** - * Добавить Фото + * Записать фото * * @param $img Фото + * + * @return self */ - public function image($img): self + public function image(...$imgs): self { - //загрузить фото - $id = $this->robot->photo()->get_photo($img); + // Перебор фото + foreach ($imgs as $img) { - //добавить к вложениям - $this->add($id); + // Загрузить фото + $id = $this->robot->photo->getPhoto($img); + + // Записать к вложениям + $this->attachment($id); + } return $this; } /** - * Добавить вложения + * Записать вложение * - * @param string|array $attachments Вложения + * @param $attachments Вложения */ - public function add(string|array $attachments): self + public function attachment(string ...$attachments): self { - if (is_array($attachments)) { - $this->attachments = array_merge($this->attachments, $attachments); + if (isset($this->attachment)) { + // Если вложения инициализированны + + // Записать вложение + $this->attachment->attachment(...$attachments); } else { - array_push($this->attachments, $attachments); + // Если вложения не инициализированны + + // Инициализация вложений + $this->attachment = new attachments($this->robot); + + // Записать вложение + $this->attachment->attachment(...$attachments); } return $this; @@ -125,35 +144,37 @@ final class messages extends method $this->robot->api->reinit(); // Цель отправки - $this->robot->api->chooseDestination($this->destination); + $this->robot->api->chooseDestination($destination); - // Сообщение - $this->robot->api['message'] = $this->message; + // Текст сообщения + $this->robot->api['message'] = $this->text; // Идентификатор сообщения $this->robot->api['random_id'] = $random_id; - // Фильтрация вложений - $forward_messages = []; - foreach ($this->attachments as &$attachment) { - //var_dump($attachment); - if (iconv_substr($attachment, 0, 7, "UTF-8") === 'message') { - // Если среди вложений найдено сообщение для пересылки - $forward_messages[] = $attachment; - unset($attachment); + // Фильтрация вложений, если они инициализированны + if (isset($this->attachments)) { + $forward_messages = []; + foreach ($this->attachments as &$attachment) { + if (iconv_substr($attachment, 0, 7, "UTF-8") === 'message') { + + // Если среди вложений найдено сообщение для пересылки + $forward_messages[] = $attachment; + unset($attachment); + } + } + + if (!empty($forward_messages)) { + // Если есть пересылаемые сообщения + $this->robot->api['forward_messages'] = implode(',', $forward_messages); + } + + if (!empty($this->attachments)) { + // Если есть вложения + $this->robot->api['attachment'] = implode(',', $this->attachments); } } - if (!empty($forward_messages)) { - // Если есть пересылаемые сообщения - $this->robot->api['forward_messages'] = implode(',', $forward_messages); - } - - //var_dump($attachments); - if (!empty($this->attachments)) { - // Если есть вложения - $this->robot->api['attachment'] = implode(',', $this->attachments); - } // Запрос $request = $this->robot->browser->request(method: 'POST', uri: 'messages.send', options: ['form_params' => $this->robot->api['settings']]); @@ -186,11 +207,36 @@ final class messages extends method return (array) $request; } - public function __get($name) + /** + * Записать свойство + * + * @param string $name Название + * @param mixed $value Значение + * + * @return void + */ + public function __set(string $name, mixed $value): void + { + match ($name) { + 'attachment' => !isset($this->attachments) ? $this->attachments = $value : throw new Exception('Запрещено перезаписывать вложения'), + 'attachments' => !isset($this->attachments) ? $this->attachments = $value : throw new Exception('Запрещено перезаписывать массив вложений'), + default => throw new Exception('Свойство не найдено: ' . $name) + }; + } + + /** + * Прочитать свойство + * + * @param string $name Название + * + * @return mixed + */ + public function __get(string $name): mixed { return match ($name) { 'text' => $this->text ?? throw new Exception('Текст не задан'), - 'attachments' => !empty($this->attachments) ? $this->attachments : throw new Exception('Вложения не заданы'), + 'attachment' => $this->attachment->attachments ?? $this->attachment = new attachments($this->robot), + 'attachments' => isset($this->attachment) ? $this->attachment->attachments : throw new Exception('Вложения не инициализированны'), default => throw new Exception('Свойство не найдено: ' . $name) }; } @@ -213,7 +259,7 @@ final class messages extends method $this->robot->api['message'] = $this->message; // Режим отправки - $settings['mode'] = $this->mode; //!!!!!!!!!!!!!!!!!!!!!! + $this->robot->api['mode'] = $this->mode; // Фильтрация вложений $forward_messages = []; diff --git a/hood/vk/system/api/methods/photos.php b/hood/vk/system/api/methods/photos.php index 634bbf8..c3e5cb1 100644 --- a/hood/vk/system/api/methods/photos.php +++ b/hood/vk/system/api/methods/photos.php @@ -31,6 +31,16 @@ final class photos extends method */ protected $url; + /** + * Создать сообщение + * + * @param robot $robot Робот + */ + public function __construct( + protected robot $robot + ) { + } + /** * Сохранить * @@ -209,29 +219,31 @@ final class photos extends method } /** - * загрузить фото и получить его id + * Загрузить фото и получить его id * * $robot робот * * $img фото */ - public function get_photo(robot $robot, $img) //Добавить проверку формата фото + public function getPhoto($img) { // Реиницилазиция $this->robot->api->reinit(); - // Инициализация настроек - $this->robot->api['group_id'] = $robot->id; + // Идентификатор группы + $this->robot->api['group_id'] = $this->robot->id; + + // Идентификатор назначения (0 Для ботов) $this->robot->api['peer_id'] = 0; // Получить адрес сервера для загрузки фотографии в личное сообщение - $this->url = json_decode($robot->browser->request('POST', 'photos.getMessagesUploadServer', [ + $url = json_decode($this->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, [ + // Загрузить фото + $response = json_decode($this->robot->browser->request('POST', $url, [ 'multipart' => [ [ 'Content-type' => 'multipart/form-data', @@ -241,18 +253,33 @@ final class photos extends method ] ])->getBody()->getContents()); + + // Реинициализация $this->robot->api->reinit(); - $this->robot->api['group_id'] = $robot->id; + + // Идентификатор группы + $this->robot->api['group_id'] = $this->robot->id; + + + // Сервер $this->robot->api['server'] = $response->server; + + // Фото $this->robot->api['photo'] = $response->photo; + + // Хэш $this->robot->api['hash'] = $response->hash; - //сохранить - $response = json_decode($robot->browser->request('POST', 'photos.saveMessagesPhoto', [ + // Сохранить фото + $response = json_decode($this->robot->browser->request('POST', 'photos.saveMessagesPhoto', [ 'form_params' => $this->robot->api['settings'] ])->getBody()->getContents()); - //Ссылка на фото - return 'photo' . $response->response[0]->owner_id . '_' . $response->response[0]->id; + // Ссылка на фото + if (isset($response->response)) { + return 'photo' . $response->response[0]->owner_id . '_' . $response->response[0]->id; + } else { + throw new Exception('Фото не загружено'); + } } } diff --git a/hood/vk/system/robots/robot.php b/hood/vk/system/robots/robot.php index 7fff5f9..605b981 100644 --- a/hood/vk/system/robots/robot.php +++ b/hood/vk/system/robots/robot.php @@ -81,7 +81,6 @@ abstract class robot */ protected api $api; - /** * Конструктор * diff --git a/hood/vk/tests/api/apiTest.php b/hood/vk/tests/api/apiTest.php new file mode 100644 index 0000000..31d2c07 --- /dev/null +++ b/hood/vk/tests/api/apiTest.php @@ -0,0 +1,227 @@ +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), 'Ошибка при деинициализации робота'); + } + + /** + * @testdox Инициализация (безопасная) + */ + public function testInit(): void + { + // Безопасная инициализация + self::$robot->key(self::$group_key)->api->init(); + } + + /** + * @testdox Реинициализация + */ + public function testReinit(): void + { + // Реинициализация + self::$robot->key(self::$group_key)->api->reinit(); + } + + /** + * @testdox Запись робота (повторная) + */ + public function testWriteRobot(): void + { + // Проверка выброса исключения + $this->expectExceptionMessage('Запрещено перезаписывать робота'); + + // Повторная запись робота + self::$robot->key(self::$group_key)->api->robot = 'robot'; + } + + /** + * @tesetdox Чтение робота + */ + public function testReadRobot(): void + { + // Чтение робота + $this->assertNotNull(self::$robot->key(self::$group_key)->api->robot); + } + + /** + * @testdox Запись настроек + */ + public function testWriteSettings(): void + { + // Проверка выброса исключения + $this->expectExceptionMessage('Запрещено перезаписывать настройки'); + + // Запись настроек + self::$robot->key(self::$group_key)->api['settings'] = 'settings'; + } + + /** + * @testdox Чтение элемента настроек + */ + public function testReadSettingsElement(): void + { + // Проверка выброса исключения + $this->expectExceptionMessage('Не найдено: settings[\'element\']'); + + // Чтение элемента настроек + self::$robot->key(self::$group_key)->api['element']; + } + + /** + * @testdox Запись элемента настроек + */ + public function testWriteSettingsElement(): void + { + // Запись элемента настроек + self::$robot->key(self::$group_key)->api['element'] = 'element'; + + // Проверка + $this->assertNotNull(self::$robot->api['element']); + } + + /** + * @testdox Выбор получателя по идентификатору + */ + public function testchooseDestinationById(): void + { + // Выбор получателя по идентификатору + self::$robot->key(self::$group_key)->api->chooseDestination(12345); + + // Проверка + $this->assertNotNull(self::$robot->api['peer_id']); + } + + /** + * @testdox Выбор получателей по идентификаторам + */ + public function testchooseDestinationByIds(): void + { + // Выбор получателей по идентификаторам + self::$robot->key(self::$group_key)->api->chooseDestination([12345, 12345]); + + // Проверка + $this->assertNotNull(self::$robot->api['user_ids']); + } + + /** + * @testdox Выбор получателя по домену + */ + public function testchooseDestinationByDomain(): void + { + // Выбор получателя по домену + self::$robot->key(self::$group_key)->api->chooseDestination('domain'); + + // Проверка + $this->assertNotNull(self::$robot->api['domain']); + } +} diff --git a/hood/vk/tests/api/attachmentsTest.php b/hood/vk/tests/api/attachmentsTest.php new file mode 100644 index 0000000..63fb445 --- /dev/null +++ b/hood/vk/tests/api/attachmentsTest.php @@ -0,0 +1,187 @@ +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), 'Ошибка при деинициализации робота'); + } + + /** + * @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(); + } +} diff --git a/hood/vk/tests/api/methods/messagesTest.php b/hood/vk/tests/api/methods/messagesTest.php index fc8ccd7..5fc7ad8 100644 --- a/hood/vk/tests/api/methods/messagesTest.php +++ b/hood/vk/tests/api/methods/messagesTest.php @@ -119,86 +119,89 @@ final class messagesTest extends TestCase */ public function testReadText(): void { + // Проверка выброса исключения $this->expectExceptionMessage('Текст не задан'); + // Чтение текста self::$robot->message()->text; } /** - * @testdox Чтение вложений + * @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 + { + // Запись фото + self::$robot->message()->text('img'); + } + + /** + * @testdox Чтение Вложений */ public function testReadAttachments(): void { - $this->expectExceptionMessage('Вложения не заданы'); + // Проверка выброса исключеия + $this->expectExceptionMessage('Вложения не инициализированны'); + // Проверка self::$robot->message()->attachments; } - /** - * @testdox Добавление текста + * @testdox Запись вложений */ - public function testWriteText() //: hood\vk\api\methods\messages + public function testWriteAttachments(): void { - //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; + // Запись вложений + self::$robot->message()->attachment('text'); } /** * @testdox Отправка сообщения - * - * @depends testAddAttachmentsWhenTheyIsAlreadyWrited */ - //public function testSend($messages) - //{ - //Проверка выбрса исключения - //$this->expectExceptionMessage('Ключ не инициализирован'); - - //Отправка по идентификатору - //$messages->send(self::$peer_id); + public function testSend(): void + { + // Отправка сообщения + self::$robot->key(self::$group_key)->message()->send('123'); + } - //Отправка по идентификаторам - //$messages->send(self::$peer_ids); + /** + * @testdox Отправка сообщеий (с вложениями) + */ + public function testSendWithAttachments(): void + { + // Запись вложений + $message = self::$robot->key(self::$group_key)->message()->attachment('text'); - //Отправка по домену - //$messages->send(self::$domain); + // Отправка сообщения + $message->send('123'); + } - //} + /** + * @t estdox Отправка сообщеий (с пересылаемым сообщением) + */ } diff --git a/hood/vk/tests/api/methods/photosTest.php b/hood/vk/tests/api/methods/photosTest.php index cc02f78..c7647d2 100644 --- a/hood/vk/tests/api/methods/photosTest.php +++ b/hood/vk/tests/api/methods/photosTest.php @@ -113,4 +113,16 @@ final class photosTest extends TestCase // Проверка $this->assertEmpty(self::$core->get(self::$robot->id), 'Ошибка при деинициализации робота'); } -} \ No newline at end of file + + /** + * @testdox Загрузка фото и получение его id + */ + public function testGetPhoto(): void + { + // Ожидаемое исключение (это временно) + $this->expectExceptionMessage('Фото не загружено'); + + // Проверка + self::$robot->key(self::$group_key)->photo()->getPhoto('img'); + } +} diff --git a/hood/vk/tests/robots/groupTest.php b/hood/vk/tests/robots/groupTest.php index 1eda3ea..91cb2ce 100644 --- a/hood/vk/tests/robots/groupTest.php +++ b/hood/vk/tests/robots/groupTest.php @@ -226,37 +226,11 @@ final class groupTest extends TestCase } /** - * @testdox Чтение api + * @testdox Чтение API */ public function testRobotGroupReadApi(): void { - $this->expectExceptionMessage('Ключ не инициализирован'); - - $api = self::$robot->api; - } - - /** - * @testdox Запись версии API - */ - public function testRobotGroupWriteVersion(): void - { - // Проверка выброса исключения - $this->expectExceptionMessage('Запрещено перезаписывать версию API'); - $this->expectExceptionMessage('Ключ не инициализирован'); - - // Запись версии - self::$robot->api->version = empty(self::$robot->api->version) ? rand(0, 10) : self::$robot->api->version; - } - - /** - * @testdox Чтение версии API - */ - public function testRobotGroupReadVersion(): void - { - // Проверка выброса исключения - $this->expectExceptionMessage('Ключ не инициализирован'); - // Проверка - $this->assertNotNull(self::$robot->api->version, 'Не удалось прочитать версию'); + $this->assertNotNull(self::$robot->key(self::$group_key)->api); } } diff --git a/hood/vk/tests/robots/userTest.php b/hood/vk/tests/robots/userTest.php index af9a69e..8201d27 100644 --- a/hood/vk/tests/robots/userTest.php +++ b/hood/vk/tests/robots/userTest.php @@ -201,52 +201,11 @@ final class userTest extends TestCase } /** - * @testdox Чтение ключа + * @testdox Чтение API */ - public function testRobotGroupReadKey(): void + public function testRobotGroupReadApi(): void { - // Запись ключа - self::$robot->key((string) (empty(self::$key) ? rand(0, 10) : self::$key)); - - // Проверки - $this->assertNotNull(self::$robot->key, 'Не удалось записать ключ пользователя'); - $this->assertNotNull(self::$robot->key, 'Не удалось прочитать ключ'); - } - - /** - * @testdox Чтение ключа, если он не инициализирован - */ - public function testRobotGroupReadKeyWhenHeIsNotInit(): void - { - // Проверка выброса исключения - $this->expectExceptionMessage('Ключ не инициализирован'); - - // Чтение ключа - $key = self::$robot->key; - } - - /** - * @testdox Запись версии API - */ - public function testRobotGroupWriteVersion(): void - { - // Проверка выброса исключения - $this->expectExceptionMessage('Запрещено перезаписывать версию API'); - $this->expectExceptionMessage('Ключ не инициализирован'); - - // Запись версии - self::$robot->api->version = empty(self::$robot->api->version) ? rand(0, 10) : self::$robot->api->version; - } - - /** - * @testdox Чтение версии API - */ - public function testRobotGroupReadVersion(): void - { - // Проверка выброса исключения - $this->expectExceptionMessage('Ключ не инициализирован'); - // Проверка - $this->assertNotNull(self::$robot->api->version, 'Не удалось прочитать версию'); + $this->assertNotNull(self::$robot->key(self::$group_key)->api); } }