// OneScript: ./OInt/tests/Modules/internal/Modules/os

// MIT License

// Copyright (c) 2023-2026 Anton Tsitavets

// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:

// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.

// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.

// https://github.com/Bayselonarrend/OpenIntegrations

// BSLLS:LatinAndCyrillicSymbolInWord-off
// BSLLS:IncorrectLineBreak-off
// BSLLS:UsingHardcodePath-off
// BSLLS:Typo-off
// BSLLS:DeprecatedMessage-off
// BSLLS:UsingServiceTag-off
// BSLLS:ExecuteExternalCodeInCommonModule-off
// BSLLS:DuplicateStringLiteral-off
// BSLLS:MagicNumber-off
// BSLLS:UsingHardcodeNetworkAddress-off
// BSLLS:UsingSynchronousCalls-off
// BSLLS:UnusedLocalMethod-off
// BSLLS:MissingTemporaryFileDeletion-off
// BSLLS:MethodSize-off
// BSLLS:IfElseIfEndsWithElse-off
// BSLLS:CognitiveComplexity-off
// BSLLS:NumberOfOptionalParams-off
// BSLLS:CommentedCode-off
// BSLLS:CyclomaticComplexity-off
// BSLLS:LineLength-off
// BSLLS:NestedStatements-off
// BSLLS:IfElseDuplicatedCodeBlock-off

//@skip-check use-non-recommended-method
//@skip-check module-structure-top-region
//@skip-check module-structure-method-in-regions
//@skip-check undefined-function-or-procedure
//@skip-check wrong-string-literal-content
//@skip-check module-unused-method
//@skip-check missing-temporary-file-deletion
//@skip-check method-too-many-params
//@skip-check bsl-legacy-check-for-each-statetement-collection
//@skip-check bsl-legacy-check-string-literal
//@skip-check bsl-legacy-check-expression-type
//@skip-check undefined-variable

#Использовать "../../../../tools/main"
#Использовать "../../../../tools/http"
#Использовать "../../../../api/openai"
#Использовать "../../../../api/rportal"
#Использовать asserts


#Область СлужебныйПрограммныйИнтерфейс

Функция ВыполнитьТестCLI(Знач Библиотека, Знач Метод, Знач Опции, Знач Записывать = Истина) Экспорт

    Если OPI_Инструменты.ЭтоWindows() Тогда
        Oint = """C:\Program Files (x86)\OInt\bin\oint.bat""";
    Иначе
        Oint = "oint";
    КонецЕсли;

    ФайлРезультата = ПолучитьИмяВременногоФайла();

    СтрокаЗапуска = Oint + " " + Библиотека + " " + Метод;
    ДопОпции      = Новый Структура;
    ОпцииЗаписи   = Новый Структура;

    Для Каждого Опция Из Опции Цикл

        Если Опция.Значение = Неопределено Или Строка(Опция.Значение) = "" Тогда
            Продолжить;
        КонецЕсли;

        ТекущееЗначение = ПолучитьЗначениеДляCLI(Опция.Значение, , ДопОпции);

        СтрокаЗапуска = СтрокаЗапуска + " --" + Опция.Ключ + " " + ТекущееЗначение;

        ОпцииЗаписи.Вставить(Опция.Ключ, ТекущееЗначение);

    КонецЦикла;

    Для Каждого ДопОпция Из ДопОпции Цикл

        ТекущееЗначение = ПолучитьЗначениеДляCLI(ДопОпция.Значение);

        СтрокаЗапуска = СтрокаЗапуска + " --" + ДопОпция.Ключ + " " + ТекущееЗначение;

        ОпцииЗаписи.Вставить(ДопОпция.Ключ, ТекущееЗначение);

    КонецЦикла;

    // BSLLS:ExternalAppStarting-off
    ЗапуститьПриложение(СтрокаЗапуска + " --out """ + ФайлРезультата + """ --debug", , Истина);
    // BSLLS:ExternalAppStarting-on

    Результат = ПрочестьРезультатCLI(ФайлРезультата);

    Если Записывать Тогда
        ЗаписатьВызовCLI(Библиотека, Метод, ОпцииЗаписи);
    КонецЕсли;

    OPI_Инструменты.УдалитьФайлВПопытке(ФайлРезультата, "Не удалось удалить временный файл после теста!");

    Возврат Результат;

КонецФункции

Функция ПолучитьСоответствиеРазделовТестирования() Экспорт

    Разделы = Новый Структура;
    Разделы.Вставить("Core"           , 1);
    Разделы.Вставить("Telegram"       , 5);
    Разделы.Вставить("VK"             , 5);
    Разделы.Вставить("Viber"          , 5);
    Разделы.Вставить("FTP"            , 5);
    Разделы.Вставить("SSH"            , 5);
    Разделы.Вставить("SFTP"           , 5);
    Разделы.Вставить("PostgreSQL"     , 5);
    Разделы.Вставить("MySQL"          , 5);
    Разделы.Вставить("MSSQL"          , 5);
    Разделы.Вставить("SQLite"         , 5);
    Разделы.Вставить("MongoDB"        , 5);
    Разделы.Вставить("RCON"           , 5);
    Разделы.Вставить("YandexDisk"     , 5);
    Разделы.Вставить("GoogleWorkspace", 2);
    Разделы.Вставить("GoogleCalendar" , 5);
    Разделы.Вставить("GoogleDrive"    , 5);
    Разделы.Вставить("GoogleSheets"   , 5);
    Разделы.Вставить("Notion"         , 5);
    Разделы.Вставить("Slack"          , 5);
    Разделы.Вставить("Airtable"       , 5);
    Разделы.Вставить("Dropbox"        , 5);
    Разделы.Вставить("Bitrix24"       , 5);
    Разделы.Вставить("VKTeams"        , 5);
    Разделы.Вставить("Neocities"      , 5);
    Разделы.Вставить("CDEK"           , 5);
    Разделы.Вставить("YandexMetrika"  , 5);
    Разделы.Вставить("S3"             , 5);
    Разделы.Вставить("TCP"            , 5);
    Разделы.Вставить("WebSocket"      , 5);
    Разделы.Вставить("ZeroMQ"         , 5);
    Разделы.Вставить("GreenAPI"       , 5);
    Разделы.Вставить("GreenMax"       , 5);
    Разделы.Вставить("Ollama"         , 5);
    Разделы.Вставить("HTTP"           , 5);
    Разделы.Вставить("OpenAI"         , 5);
    Разделы.Вставить("ReportPortal"   , 5);
    Разделы.Вставить("GRPC"           , 5);
    Разделы.Вставить("ClickHouse"     , 5);
    Разделы.Вставить("RSS"            , 5);
    Разделы.Вставить("MessagePack"    , 5);
    Разделы.Вставить("Janx"           , 5);
    Разделы.Вставить("Lua"            , 5);

    Возврат Разделы;

КонецФункции

Функция ПолучитьТаблицуТестов(Знач МодульТестов = "") Экспорт

    Телеграм  = "Telegram";
    ВКонтакте = "VK";
    ЯДиск     = "YandexDisk";
    Календарь = "GoogleCalendar";
    Вайбер    = "Viber";
    Драйв     = "GoogleDrive";
    ВСпейс    = "GoogleWorkspace";
    Ноушн     = "Notion";
    Слак      = "Slack";
    Таблицы   = "GoogleSheets";
    АирТ      = "Airtable";
    ДропБокс  = "Dropbox";
    Битрикс   = "Bitrix24";
    ВКТ       = "VKTeams";
    Неоситиз  = "Neocities";
    Сдэк      = "CDEK";
    Метрика   = "YandexMetrika";
    S3_       = "S3";
    TCP       = "TCP";
    WebSocket = "WebSocket";
    SQLite    = "SQLite";
    Postgres  = "PostgreSQL";
    MongoDB   = "MongoDB";
    GreenAPI  = "GreenAPI";
    RCON      = "RCON";
    MySQL     = "MySQL";
    Ollama    = "Ollama";
    Http      = "HTTP";
    OpenAI    = "OpenAI";
    MSSQL     = "MSSQL";
    FTP       = "FTP";
    RPortal   = "ReportPortal";
    SSH       = "SSH";
    SFTP      = "SFTP";
    GreenMax  = "GreenMax";
    GRPC      = "GRPC";
    CHouse    = "ClickHouse";
    RSS       = "RSS";
    ZMQ       = "ZeroMQ";
    MsgPack   = "MessagePack";
    Janx      = "Janx";
    Lua       = "Lua";

    МассивТестов = Новый Массив;

    НовыйТест(МассивТестов, МодульТестов, "ПроверитьСоответствиеИБПоследнейСборке", "Проверить соответствие ИБ последней сборке", "Core");
    НовыйТест(МассивТестов, МодульТестов, "ПроверитьРасширенныйВызов"             , "Проверить расширенный вызов"               , "Core");

    НовыйТест(МассивТестов, МодульТестов, "Телеграм_ПолучитьИнформациюБота"      , "Получить информацию бота"       , Телеграм);
    НовыйТест(МассивТестов, МодульТестов, "Телеграм_ПолучитьОбновления"          , "Получить обновления"            , Телеграм);
    НовыйТест(МассивТестов, МодульТестов, "Телеграм_УстановитьWebhook"           , "Установить Webhook"             , Телеграм);
    НовыйТест(МассивТестов, МодульТестов, "Телеграм_ОтправитьТекстовоеСообщение" , "Отправить текстовое сообщение"  , Телеграм);
    НовыйТест(МассивТестов, МодульТестов, "Телеграм_ОтправитьКартинку"           , "Отправить картинку"             , Телеграм);
    НовыйТест(МассивТестов, МодульТестов, "Телеграм_ОтправитьВидео"              , "Отправить видео"                , Телеграм);
    НовыйТест(МассивТестов, МодульТестов, "Телеграм_ОтправитьАудио"              , "Отправить аудио"                , Телеграм);
    НовыйТест(МассивТестов, МодульТестов, "Телеграм_ОтправитьДокумент"           , "Отправить документ"             , Телеграм);
    НовыйТест(МассивТестов, МодульТестов, "Телеграм_ОтправитьГифку"              , "Отправить гифку"                , Телеграм);
    НовыйТест(МассивТестов, МодульТестов, "Телеграм_ОтправитьМедиагруппу"        , "Отправить медиагруппу"          , Телеграм);
    НовыйТест(МассивТестов, МодульТестов, "Телеграм_ОтправитьМестоположение"     , "Отправить местоположение"       , Телеграм);
    НовыйТест(МассивТестов, МодульТестов, "Телеграм_ОтправитьКонтакт"            , "Отправить контакт"              , Телеграм);
    НовыйТест(МассивТестов, МодульТестов, "Телеграм_ОтправитьОпрос"              , "Отправить опрос"                , Телеграм);
    НовыйТест(МассивТестов, МодульТестов, "Телеграм_ПереслатьСообщение"          , "Переслать сообщение"            , Телеграм);
    НовыйТест(МассивТестов, МодульТестов, "Телеграм_БанРазбан"                   , "Бан/Разбан"                     , Телеграм);
    НовыйТест(МассивТестов, МодульТестов, "Телеграм_СоздатьСсылкуПриглашение"    , "Создать ссылку-приглашение"     , Телеграм);
    НовыйТест(МассивТестов, МодульТестов, "Телеграм_ЗакрепитьОткрепитьСообщение" , "Закрепить/Открепить сообщение"  , Телеграм);
    НовыйТест(МассивТестов, МодульТестов, "Телеграм_ПолучитьЧислоУчастников"     , "Получить число участников"      , Телеграм);
    НовыйТест(МассивТестов, МодульТестов, "Телеграм_ПолучитьСписокАватаровФорума", "Получить список аватаров форума", Телеграм);
    НовыйТест(МассивТестов, МодульТестов, "Телеграм_СоздатьУдалитьТемуФорума"    , "Создать/Удалить тему форума"    , Телеграм);
    НовыйТест(МассивТестов, МодульТестов, "Телеграм_ИзменитьИмяГлавнойТемы"      , "Изменить имя главной темы"      , Телеграм);
    НовыйТест(МассивТестов, МодульТестов, "Телеграм_СкрытьПоказатьГлавнуюТему"   , "Скрыть/Показать главную тему"   , Телеграм);
    НовыйТест(МассивТестов, МодульТестов, "ВК_СоздатьСсылкуТокена"               , "Создать ссылку получения токена", ВКонтакте);
    НовыйТест(МассивТестов, МодульТестов, "ВК_СоздатьУдалитьПост"                , "Создать/Удалить пост"           , ВКонтакте);
    НовыйТест(МассивТестов, МодульТестов, "ВК_СоздатьСоставнойПост"              , "Создать/Удалить составной пост" , ВКонтакте);
    НовыйТест(МассивТестов, МодульТестов, "ВК_СоздатьОпрос"                      , "Создать опрос"                  , ВКонтакте);
    НовыйТест(МассивТестов, МодульТестов, "ВК_СохранитьУдалитьКартинку"          , "Добавить/Удалить картинку"      , ВКонтакте);
    НовыйТест(МассивТестов, МодульТестов, "ВК_СоздатьИсторию"                    , "Создать историю"                , ВКонтакте);
    НовыйТест(МассивТестов, МодульТестов, "ВК_ЛайкРепостКоммент"                 , "Лайк/Репост/Комментарий"        , ВКонтакте);
    НовыйТест(МассивТестов, МодульТестов, "ВК_ПолучитьСтатистику"                , "Получить статистику"            , ВКонтакте);
    НовыйТест(МассивТестов, МодульТестов, "ВК_ПолучитьСтатистикуПостов"          , "Получить статистику постов"     , ВКонтакте);
    НовыйТест(МассивТестов, МодульТестов, "ВК_СоздатьРекламнуюКампанию"          , "Создать рекламную кампанию"     , ВКонтакте);
    НовыйТест(МассивТестов, МодульТестов, "ВК_ОтправитьСообщение"                , "Отправить сообщение"            , ВКонтакте);
    НовыйТест(МассивТестов, МодульТестов, "ВК_ПолучитьКатегорииТоваров"          , "Получить категории товаров"     , ВКонтакте);
    НовыйТест(МассивТестов, МодульТестов, "ВК_СоздатьТоварПодборку"              , "Создать товар и подборку"       , ВКонтакте);
    НовыйТест(МассивТестов, МодульТестов, "ВК_СоздатьТоварСоСвойствами"          , "Создать товар со свойствами"    , ВКонтакте);
    НовыйТест(МассивТестов, МодульТестов, "ВК_ПолучитьСписокТоваров"             , "Получить список товаров"        , ВКонтакте);
    НовыйТест(МассивТестов, МодульТестов, "ВК_ПолучитьСписокПодборок"            , "Получить список подборок"       , ВКонтакте);
    НовыйТест(МассивТестов, МодульТестов, "ВК_ПолучитьСписокСвойств"             , "Получить список свойств"        , ВКонтакте);
    НовыйТест(МассивТестов, МодульТестов, "ВК_ПолучитьСписокЗаказов"             , "Получить список заказов"        , ВКонтакте);
    НовыйТест(МассивТестов, МодульТестов, "ВК_ЗагрузитьВидео"                    , "Загрузить видео"                , ВКонтакте);
    НовыйТест(МассивТестов, МодульТестов, "ЯДиск_Авторизация"                    , "Авторизация"                    , ЯДиск);
    НовыйТест(МассивТестов, МодульТестов, "ЯДиск_ПолучитьИнформациюОДиске"       , "Получить информацию о диске"    , ЯДиск);
    НовыйТест(МассивТестов, МодульТестов, "ЯДиск_СоздатьПапку"                   , "Создать папку"                  , ЯДиск);
    НовыйТест(МассивТестов, МодульТестов, "ЯДиск_ЗагрузитьПоАдресуПолучитьОбъект", "Загрузить по URL и получить"    , ЯДиск);
    НовыйТест(МассивТестов, МодульТестов, "ЯДиск_ЗагрузитьУдалитьФайл"           , "Загрузить/Удалить файл"         , ЯДиск);
    НовыйТест(МассивТестов, МодульТестов, "ЯДиск_СоздатьКопиюОбъекта"            , "Создать копию объекта"          , ЯДиск);
    НовыйТест(МассивТестов, МодульТестов, "ЯДиск_ПолучитьСсылкуНаСкачивание"     , "Получить ссылку на скачивание"  , ЯДиск);
    НовыйТест(МассивТестов, МодульТестов, "ЯДиск_ПолучитьСписокФайлов"           , "Получить список файлов"         , ЯДиск);
    НовыйТест(МассивТестов, МодульТестов, "ЯДиск_ПереместитьОбъект"              , "Переместить объект"             , ЯДиск);
    НовыйТест(МассивТестов, МодульТестов, "ЯДиск_ДействияПубличныхОбъектов"      , "Действия с публичными объектами", ЯДиск);
    НовыйТест(МассивТестов, МодульТестов, "ЯДиск_ПолучитьСписокОпубликованных"   , "Получить список опубликованных" , ЯДиск);
    НовыйТест(МассивТестов, МодульТестов, "ГВ_Авторизация"                       , "Авторизация"                    , ВСпейс);
    НовыйТест(МассивТестов, МодульТестов, "ГК_Авторизация"                       , "Авторизация"                    , Календарь);
    НовыйТест(МассивТестов, МодульТестов, "ГК_ПолучитьСписокКалендарей"          , "Получить список календарей"     , Календарь);
    НовыйТест(МассивТестов, МодульТестов, "ГК_СоздатьУдалитьКалендарь"           , "Создать/Удалить календарь"      , Календарь);
    НовыйТест(МассивТестов, МодульТестов, "ГК_СоздатьУдалитьСобытие"             , "Создать/Удалить событие"        , Календарь);
    НовыйТест(МассивТестов, МодульТестов, "ГД_Авторизация"                       , "Авторизация"                    , Драйв);
    НовыйТест(МассивТестов, МодульТестов, "ГД_ПолучитьСписокКаталогов"           , "Получить список каталогов"      , Драйв);
    НовыйТест(МассивТестов, МодульТестов, "ГД_ЗагрузитьУдалитьФайл"              , "Загрузить/Удалить Файл"         , Драйв);
    НовыйТест(МассивТестов, МодульТестов, "ГД_СоздатьУдалитьКомментарий"         , "Создать/Удалить комментарий"    , Драйв);
    НовыйТест(МассивТестов, МодульТестов, "ГД_СоздатьКаталог"                    , "Создать/Удалить каталог"        , Драйв);
    НовыйТест(МассивТестов, МодульТестов, "ГТ_Авторизация"                       , "Авторизация"                    , Таблицы);
    НовыйТест(МассивТестов, МодульТестов, "ГТ_СоздатьТаблицу"                    , "Создать таблицу"                , Таблицы);
    НовыйТест(МассивТестов, МодульТестов, "ГТ_ЗаполнитьОчиститьЯчейки"           , "Заполнить/Очистить ячейки"      , Таблицы);
    НовыйТест(МассивТестов, МодульТестов, "Вайбер_ПолучениеИнформации"           , "Получение информации"           , Вайбер);
    НовыйТест(МассивТестов, МодульТестов, "Вайбер_ОтправкаСообщений"             , "Отправка сообщений"             , Вайбер);
    НовыйТест(МассивТестов, МодульТестов, "НоушнАпи_СоздатьСтраницу"             , "Создать страницу"               , Ноушн);
    НовыйТест(МассивТестов, МодульТестов, "НоушнАпи_СоздатьИзменитьБазу"         , "Создать/Изменить базу"          , Ноушн);
    НовыйТест(МассивТестов, МодульТестов, "НоушнАпи_СоздатьУдалитьБлок"          , "Создать/Удалить блок"           , Ноушн);
    НовыйТест(МассивТестов, МодульТестов, "НоушнАпи_ПолучитьПользователей"       , "Получить пользователей"         , Ноушн);
    НовыйТест(МассивТестов, МодульТестов, "Слак_ПолучитьИнформацию"              , "Получить информацию"            , Слак);
    НовыйТест(МассивТестов, МодульТестов, "Слак_ОтправитьУдалитьСообщение"       , "Отправить/Удалить сообщение"    , Слак);
    НовыйТест(МассивТестов, МодульТестов, "Слак_СоздатьАрхивироватьКанал"        , "Создать/Архивировать канал"     , Слак);
    НовыйТест(МассивТестов, МодульТестов, "Слак_ОткрытьЗакрытьДиалог"            , "Открыть/Закрыть диалог"         , Слак);
    НовыйТест(МассивТестов, МодульТестов, "Слак_ЗагрузитьУдалитьФайл"            , "Загрузить/Удалить файл"         , Слак);
    НовыйТест(МассивТестов, МодульТестов, "Слак_ЗагрузитьУдалитьВФ"              , "Загрузить/Удалить внеш. файл"   , Слак);
    НовыйТест(МассивТестов, МодульТестов, "АТ_СоздатьБазу"                       , "Создать/Изменить базу"          , АирТ);
    НовыйТест(МассивТестов, МодульТестов, "АТ_СоздатьТаблицу"                    , "Создать/Изменить таблицу"       , АирТ);
    НовыйТест(МассивТестов, МодульТестов, "АТ_СоздатьПоле"                       , "Создать/Изменить поле"          , АирТ);
    НовыйТест(МассивТестов, МодульТестов, "АТ_СоздатьУдалитьЗаписи"              , "Создать/Удалить записи"         , АирТ);
    НовыйТест(МассивТестов, МодульТестов, "ДропБокс_ПолучитьОбновитьТокен"       , "Получить/Обновить токен"        , ДропБокс);
    НовыйТест(МассивТестов, МодульТестов, "ДропБокс_ЗагрузитьФайл"               , "Загрузить файл"                 , ДропБокс);
    НовыйТест(МассивТестов, МодульТестов, "ДропБокс_ЗагрузитьФайлПоURL"          , "Загрузить файл по URL"          , ДропБокс);
    НовыйТест(МассивТестов, МодульТестов, "ДропБокс_СоздатьКаталог"              , "Создать каталог"                , ДропБокс);
    НовыйТест(МассивТестов, МодульТестов, "ДропБокс_СоздатьУдалитьТег"           , "Создать/Удалить тег"            , ДропБокс);
    НовыйТест(МассивТестов, МодульТестов, "ДропБокс_ПолучитьАккаунт"             , "Получить данные аккаунта"       , ДропБокс);
    НовыйТест(МассивТестов, МодульТестов, "ДропБокс_РаботаСДоступами"            , "Работа с доступами"             , ДропБокс);
    НовыйТест(МассивТестов, МодульТестов, "ДропБокс_ПолучитьСписокФайловПапки"   , "Получить список файлов папки"   , ДропБокс);
    НовыйТест(МассивТестов, МодульТестов, "Б24_РаботаСТокеном"                   , "Работа с токеном"               , Битрикс);
    НовыйТест(МассивТестов, МодульТестов, "Б24_СерверноеВремя"                   , "Серверное время"                , Битрикс);
    НовыйТест(МассивТестов, МодульТестов, "Б24_РаботаСНовостями"                 , "Работа с новостями"             , Битрикс);
    НовыйТест(МассивТестов, МодульТестов, "Б24_РаботаСЗадачами"                  , "Работа с задачами"              , Битрикс);
    НовыйТест(МассивТестов, МодульТестов, "Б24_РаботаСКомментариями"             , "Работа с комментариями"         , Битрикс);
    НовыйТест(МассивТестов, МодульТестов, "Б24_РаботаСДиском"                    , "Работа с диском"                , Битрикс);
    НовыйТест(МассивТестов, МодульТестов, "Б24_Канбан"                           , "Канбан"                         , Битрикс);
    НовыйТест(МассивТестов, МодульТестов, "Б24_УчетРабочегоВремени"              , "Учет рабочего времени"          , Битрикс);
    НовыйТест(МассивТестов, МодульТестов, "Б24_РаботаСЧатами"                    , "Работа с чатами"                , Битрикс);
    НовыйТест(МассивТестов, МодульТестов, "Б24_РаботаСУведомлениями"             , "Работа с уведомлениями"         , Битрикс);
    НовыйТест(МассивТестов, МодульТестов, "Б24_РаботаСПолямиЗадач"               , "Работа с польз. полями задач"   , Битрикс);
    НовыйТест(МассивТестов, МодульТестов, "Б24_УправлениеПодразделениями"        , "Управление подразделениями"     , Битрикс);
    НовыйТест(МассивТестов, МодульТестов, "Б24_УправлениеПользователями"         , "Управление пользователями"      , Битрикс);
    НовыйТест(МассивТестов, МодульТестов, "Б24_РаботаСЛидами"                    , "Работа с лидами"                , Битрикс);
    НовыйТест(МассивТестов, МодульТестов, "Б24_РаботаСоСделками"                 , "Работа со сделками"             , Битрикс);
    НовыйТест(МассивТестов, МодульТестов, "Б24_РаботаСКалендарями"               , "Работа с календарями"           , Битрикс);
    НовыйТест(МассивТестов, МодульТестов, "ВКТ_ОтправкаСообщений"                , "Отправка сообщений"             , ВКТ);
    НовыйТест(МассивТестов, МодульТестов, "ВКТ_ОбщиеМетоды"                      , "Общие методы"                   , ВКТ);
    НовыйТест(МассивТестов, МодульТестов, "ВКТ_УправлениеЧатами"                 , "Управление чатами"              , ВКТ);
    НовыйТест(МассивТестов, МодульТестов, "НС_РаботаСФайлами"                    , "Работа с файлами"               , Неоситиз);
    НовыйТест(МассивТестов, МодульТестов, "НС_ПолучениеДанных"                   , "Получение данных"               , Неоситиз);
    НовыйТест(МассивТестов, МодульТестов, "СдэкАПИ_ОбщиеМетоды"                  , "Общие методы"                   , Сдэк);
    НовыйТест(МассивТестов, МодульТестов, "СдэкАПИ_РаботаСЗаказами"              , "Работа с заказами"              , Сдэк);
    НовыйТест(МассивТестов, МодульТестов, "СдэкАПИ_РаботаСЗаявкамиНаВызовКурьера", "Работа с заявками курьера"      , Сдэк);
    НовыйТест(МассивТестов, МодульТестов, "ЯМетрика_УправлениеМетками"           , "Управление метками"             , Метрика);
    НовыйТест(МассивТестов, МодульТестов, "ЯМетрика_УправлениеСчетчиками"        , "Управление счетчиками"          , Метрика);
    НовыйТест(МассивТестов, МодульТестов, "ЯМетрика_УправлениеОперациями"        , "Управление операциями"          , Метрика);
    НовыйТест(МассивТестов, МодульТестов, "AWS_ОбщиеМетоды"                      , "Общие методы"                   , S3_);
    НовыйТест(МассивТестов, МодульТестов, "AWS_РаботаСБакетами"                  , "Работа с бакетами"              , S3_);
    НовыйТест(МассивТестов, МодульТестов, "AWS_РаботаСОбъектами"                 , "Работа с объектами"             , S3_);
    НовыйТест(МассивТестов, МодульТестов, "TC_Клиент"                            , "TCP Клиент"                     , TCP);
    НовыйТест(МассивТестов, МодульТестов, "WS_Клиент"                            , "WebSocket Клиент"               , WebSocket);
    НовыйТест(МассивТестов, МодульТестов, "WS_Сервер"                            , "WebSocket Сервер"               , WebSocket);
    НовыйТест(МассивТестов, МодульТестов, "WS_РасширеннаяПроверка"               , "Расширенная проверка"           , WebSocket);
    НовыйТест(МассивТестов, МодульТестов, "ZMQ_Общие"                            , "Общие"                          , ZMQ);
    НовыйТест(МассивТестов, МодульТестов, "ZMQ_МетодыПодключения"                , "Подключение"                    , ZMQ);
    НовыйТест(МассивТестов, МодульТестов, "ZMQ_МетодыПрослушивания"              , "Прослушивание"                  , ZMQ);
    НовыйТест(МассивТестов, МодульТестов, "ZMQ_МетодыВзаимодействия"             , "Взаимодействие"                 , ZMQ);
    НовыйТест(МассивТестов, МодульТестов, "ZMQ_РасширеннаяПроверка"              , "Расширенная проверка"           , ZMQ);
    НовыйТест(МассивТестов, МодульТестов, "TC_Сервер"                            , "TCP Сервер"                     , TCP);
    НовыйТест(МассивТестов, МодульТестов, "TC_РасширеннаяПроверка"               , "Расширенная проверка"            , TCP);
    НовыйТест(МассивТестов, МодульТестов, "SQLL_ОсновныеМетоды"                  , "Основные методы"                , SQLite);
    НовыйТест(МассивТестов, МодульТестов, "SQLL_РасширеннаяПроверка"             , "Расширенная проверка"           , SQLite);
    НовыйТест(МассивТестов, МодульТестов, "SQLL_ORM"                             , "ORM"                            , SQLite);
    НовыйТест(МассивТестов, МодульТестов, "Postgres_ОсновныеМетоды"              , "Основные методы"                , Postgres);
    НовыйТест(МассивТестов, МодульТестов, "Postgres_РасширеннаяПроверка"         , "Расширенная проверка"           , Postgres);
    НовыйТест(МассивТестов, МодульТестов, "Postgres_ORM"                         , "ORM"                            , Postgres);
    НовыйТест(МассивТестов, МодульТестов, "MYS_ОсновныеМетоды"                   , "Основные методы"                , MySQL);
    НовыйТест(МассивТестов, МодульТестов, "MYS_РасширеннаяПроверка"              , "Расширенная проверка"           , MySQL);
    НовыйТест(МассивТестов, МодульТестов, "MYS_ORM"                              , "ORM"                            , MySQL);
    НовыйТест(МассивТестов, МодульТестов, "MSS_ОсновныеМетоды"                   , "Основные методы"                , MSSQL);
    НовыйТест(МассивТестов, МодульТестов, "MSS_РасширеннаяПроверка"              , "Расширенная проверка"           , MSSQL);
    НовыйТест(МассивТестов, МодульТестов, "MSS_ORM"                              , "ORM"                            , MSSQL);
    НовыйТест(МассивТестов, МодульТестов, "Mongo_ОсновныеМетоды"                 , "Основные методы"                , MongoDB);
    НовыйТест(МассивТестов, МодульТестов, "Mongo_РасширеннаяПроверка"            , "Расширенная проверка"           , MongoDB);
    НовыйТест(МассивТестов, МодульТестов, "Mongo_РаботаСБазами"                  , "Работа с базами"                , MongoDB);
    НовыйТест(МассивТестов, МодульТестов, "Mongo_РаботаСКоллекциями"             , "Работа с коллекциями"           , MongoDB);
    НовыйТест(МассивТестов, МодульТестов, "Mongo_РаботаСДокументами"             , "Работа с документами"           , MongoDB);
    НовыйТест(МассивТестов, МодульТестов, "Mongo_УправлениеПользователями"       , "Управление пользователями"      , MongoDB);
    НовыйТест(МассивТестов, МодульТестов, "Mongo_УправлениеРолями"               , "Управление ролями"              , MongoDB);
    НовыйТест(МассивТестов, МодульТестов, "GAPI_УправлениеГруппами"              , "Управление группами"            , GreenAPI);
    НовыйТест(МассивТестов, МодульТестов, "GAPI_ОтправкаСообщений"               , "Отправка сообщений"             , GreenAPI);
    НовыйТест(МассивТестов, МодульТестов, "GAPI_ПолучениеУведомлений"            , "Получение уведомлений"          , GreenAPI);
    НовыйТест(МассивТестов, МодульТестов, "GAPI_ОчередьСообщений"                , "Очередь сообщений"              , GreenAPI);
    НовыйТест(МассивТестов, МодульТестов, "GAPI_ЖурналыСообщений"                , "Журналы сообщений"              , GreenAPI);
    НовыйТест(МассивТестов, МодульТестов, "GAPI_Аккаунт"                         , "Аккаунт"                        , GreenAPI);
    НовыйТест(МассивТестов, МодульТестов, "GMax_РаботаСГруппами"                 , "Работа с группами"              , GreenMax);
    НовыйТест(МассивТестов, МодульТестов, "GMax_ОтправкаСообщений"               , "Отправка сообщений"             , GreenMax);
    НовыйТест(МассивТестов, МодульТестов, "GMax_Уведомления"                     , "Уведомления"                    , GreenMax);
    НовыйТест(МассивТестов, МодульТестов, "GMax_ИсторияСообщений"                , "История сообщений"              , GreenMax);
    НовыйТест(МассивТестов, МодульТестов, "GMax_Очереди"                         , "Очереди"                        , GreenMax);
    НовыйТест(МассивТестов, МодульТестов, "GMax_Аккаунт"                         , "Аккаунт"                        , GreenMax);
    НовыйТест(МассивТестов, МодульТестов, "RC_ВыполнениеКоманд"                  , "Выполнение команд"              , RCON);
    НовыйТест(МассивТестов, МодульТестов, "RC_РасширеннаяПроверка"               , "Расширенная проверка"           , RCON);
    НовыйТест(МассивТестов, МодульТестов, "OLLM_ОбработкаЗапросов"               , "Обработка запросов"             , Ollama);
    НовыйТест(МассивТестов, МодульТестов, "OLLM_РаботаСМоделями"                 , "Работа с моделями"              , Ollama);
    НовыйТест(МассивТестов, МодульТестов, "OLLM_РаботаСBlob"                     , "Работа с BLOB"                  , Ollama);
    НовыйТест(МассивТестов, МодульТестов, "HTTP_Инициализация"                   , "Инициализация"                  , Http);
    НовыйТест(МассивТестов, МодульТестов, "HTTP_УстановкаТела"                   , "Установка тела"                 , Http);
    НовыйТест(МассивТестов, МодульТестов, "HTTP_Настройки"                       , "Настройки"                      , Http);
    НовыйТест(МассивТестов, МодульТестов, "HTTP_УстановкаЗаголовков"             , "Установка заголовков"           , Http);
    НовыйТест(МассивТестов, МодульТестов, "HTTP_Авторизация"                     , "Авторизация"                    , Http);
    НовыйТест(МассивТестов, МодульТестов, "HTTP_ОбработкаЗапроса"                , "Обработка запроса"              , Http);
    НовыйТест(МассивТестов, МодульТестов, "HTTP_ПолучениеОтвета"                 , "Получение ответа"               , Http);
    НовыйТест(МассивТестов, МодульТестов, "OAI_ОбработкаЗапросов"                , "Обработка запросов"             , OpenAI);
    НовыйТест(МассивТестов, МодульТестов, "OAI_Ассистенты"                       , "Ассистенты"                     , OpenAI);
    НовыйТест(МассивТестов, МодульТестов, "OAI_РаботаСФайлами"                   , "Работа с файлами"               , OpenAI);
    НовыйТест(МассивТестов, МодульТестов, "OAI_РаботаСАудио"                     , "Работа с аудио"                 , OpenAI);
    НовыйТест(МассивТестов, МодульТестов, "OAI_РаботаСМоделями"                  , "Работа с моделями"              , OpenAI);
    НовыйТест(МассивТестов, МодульТестов, "FT_РаботаСДиректориями"               , "Работа с директориями"          , FTP);
    НовыйТест(МассивТестов, МодульТестов, "FT_РаботаСФайлами"                    , "Работа с файлами"               , FTP);
    НовыйТест(МассивТестов, МодульТестов, "FT_ОсновныеМетоды"                    , "Основные методы"                , FTP);
    НовыйТест(МассивТестов, МодульТестов, "FT_РасширеннаяПроверка"               , "Расширенная проверка"           , FTP);
    НовыйТест(МассивТестов, МодульТестов, "RPortal_Авторизация"                  , "Авторизация"                    , RPortal);
    НовыйТест(МассивТестов, МодульТестов, "RPortal_УправлениеТестами"            , "Управление тестами"             , RPortal);
    НовыйТест(МассивТестов, МодульТестов, "RPortal_ЗаписьЛогов"                  , "Запись логов"                   , RPortal);
    НовыйТест(МассивТестов, МодульТестов, "RPortal_УправлениеПроектами"          , "Управление проектами"           , RPortal);
    НовыйТест(МассивТестов, МодульТестов, "RPortal_УправлениеПользователями"     , "Управление пользователями"      , RPortal);
    НовыйТест(МассивТестов, МодульТестов, "SShell_ОсновныеМетоды"                , "Основные методы"                , SSH);
    НовыйТест(МассивТестов, МодульТестов, "SShell_РасширеннаяПроверка"           , "Расширенная проверка"           , SSH);
    НовыйТест(МассивТестов, МодульТестов, "SF_ОсновныеМетоды"                    , "Основные методы"                , SFTP);
    НовыйТест(МассивТестов, МодульТестов, "SF_РаботаСДиректориями"               , "Работа с директориями"          , SFTP);
    НовыйТест(МассивТестов, МодульТестов, "SF_РаботаСФайлами"                    , "Работа с файлами"               , SFTP);
    НовыйТест(МассивТестов, МодульТестов, "SF_РасширеннаяПроверка"               , "Расширенная проверка"           , SFTP);
    НовыйТест(МассивТестов, МодульТестов, "GR_ОсновныеМетоды"                    , "Основные методы"                , GRPC);
    НовыйТест(МассивТестов, МодульТестов, "GR_РасширеннаяПроверка"               , "Расширенная проверка"           , GRPC);
    НовыйТест(МассивТестов, МодульТестов, "GR_Интроспекция"                      , "Интроспекция"                   , GRPC);
    НовыйТест(МассивТестов, МодульТестов, "GR_Стриминг"                          , "Стриминг"                       , GRPC);
    НовыйТест(МассивТестов, МодульТестов, "CH_ОсновныеМетоды"                    , "Основные методы"                , CHouse);
    НовыйТест(МассивТестов, МодульТестов, "CH_GRPC"                              , "GRPC"                           , CHouse);
    НовыйТест(МассивТестов, МодульТестов, "RSS_МетодыRSS"                        , "Методы RSS"                     , RSS);
    НовыйТест(МассивТестов, МодульТестов, "RSS_МетодыAtom"                       , "Методы Atom"                    , RSS);
    НовыйТест(МассивТестов, МодульТестов, "MP_Данные"                            , "Данные"                         , MsgPack);
    НовыйТест(МассивТестов, МодульТестов, "MP_Бенчмарк"                          , "Бенчмарк"                       , MsgPack);
    НовыйТест(МассивТестов, МодульТестов, "MP_Совместимость"                     , "Совместимость с эталоном"       , MsgPack);
    НовыйТест(МассивТестов, МодульТестов, "Jnx_Данные"                           , "Данные"                         , Janx);
    НовыйТест(МассивТестов, МодульТестов, "Jnx_РасширеннаяПроверкаДанные"        , "Расширенная проверка данных"    , Janx);
    НовыйТест(МассивТестов, МодульТестов, "Jnx_Бенчмарк"                         , "Бенчмарк"                       , Janx);
    НовыйТест(МассивТестов, МодульТестов, "Lua_ОсновныеМетоды"                   , "Основные методы"                , Lua);
    НовыйТест(МассивТестов, МодульТестов, "Lua_РаботаСоСкриптами"                , "Работа со скриптами"            , Lua);
    НовыйТест(МассивТестов, МодульТестов, "Lua_РаботаСБайткодом"                 , "Работа с байткодом"             , Lua);
    НовыйТест(МассивТестов, МодульТестов, "Lua_РасширеннаяПроверка"              , "Расширенная проверка"           , Lua);

    Возврат МассивТестов;

КонецФункции

Функция ОжидаетЧто(Значение) Экспорт

    Попытка

        Модуль  = ПолучитьОбщийМодуль("ЮТест");
        Ожидаем = ТипЗнч(Модуль) = Тип("ОбщийМодуль");
        Возврат Модуль.ОжидаетЧто(Значение);

    Исключение
        Возврат Ожидаем.Что(Значение);
    КонецПопытки;

КонецФункции

Функция СформироватьТестыЯкс(Знач МодульТестов) Экспорт

    Модуль        = ПолучитьОбщийМодуль("ЮТТесты");
    ТаблицаТестов = ПолучитьТаблицуТестов(МодульТестов);

    Набор = Модуль.ДобавитьТестовыйНабор(МодульТестов);

    Для Каждого Тест Из ТаблицаТестов Цикл
        Набор.ДобавитьКлиентскийТест(Тест.Метод, Тест.Синоним);
        Набор.ДобавитьСерверныйТест(Тест.Метод, Тест.Синоним);
    КонецЦикла;

    Возврат "";

КонецФункции

Функция СформироватьТестыЯксCLI(Знач МодульТестов = "") Экспорт

    Модуль        = ПолучитьОбщийМодуль("ЮТТесты");
    ТаблицаТестов = ПолучитьТаблицуТестов(МодульТестов);

    Набор = Модуль.ДобавитьТестовыйНабор(МодульТестов + " (CLI)");

    Для Каждого Тест Из ТаблицаТестов Цикл
        Набор.ДобавитьТест(Тест.Метод, Тест.Синоним);
    КонецЦикла;

    Возврат "";

КонецФункции

Функция СформироватьТестыАссертс(Знач МодульТестов = "") Экспорт

    ТаблицаТестов = ПолучитьТаблицуТестов(МодульТестов);
    МассивТестов  = Новый Массив;

    Для Каждого Тест Из ТаблицаТестов Цикл
        МассивТестов.Добавить(Тест.Метод);
    КонецЦикла;

    Возврат МассивТестов;

КонецФункции

Функция СформироватьТестыАссертсCLI(Знач МодульТестов = "") Экспорт

    Возврат СформироватьТестыАссертс(МодульТестов);

КонецФункции

Функция ПолучитьПараметр(Параметр) Экспорт

    Путь = ПутьКФайлуДанных();
    Возврат ПолучитьЗначениеИзФайла(Параметр, Путь);

КонецФункции

Функция ПолучитьДвоичные(Параметр) Экспорт

    Путь     = ПутьКФайлуДанных();
    Значение = ПолучитьЗначениеИзФайла(Параметр, Путь);

    Если ТипЗнч(Значение) = Тип("Строка") Тогда

        Значение = ПолучитьФайлПути(Значение);

    КонецЕсли;

    Возврат Значение;

КонецФункции

Функция ПолучитьФайлПути(Знач Путь) Экспорт

    Если СтрНайти(Путь, "http") > 0 Или СтрНайти(Путь, "www") > 0 Тогда

        ИВФ      = ПолучитьИмяВременногоФайла();
        КопироватьФайл(Путь, ИВФ);
        Путь     = ИВФ;
        Двоичные = Новый ДвоичныеДанные(Путь);

        OPI_Инструменты.УдалитьФайлВПопытке(ИВФ, "Не удалось удалить временный файл после теста!");

    Иначе

        Двоичные = Новый ДвоичныеДанные(Путь);

    КонецЕсли;

    Возврат Двоичные;

КонецФункции

Функция ПолучитьLocalhost() Экспорт

    Если OPI_Инструменты.ЭтоWindows() Тогда
        Результат = "127.0.0.1";
    Иначе
        Результат = "host.docker.internal";
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция ЭтоТестCLI() Экспорт

    Попытка

        Данные = ПолучитьПеременнуюСреды("OINT_TESTS_CLI");


    Исключение
        Возврат Ложь;
    КонецПопытки;

    Если Строка(Данные) = "1" Тогда
        Результат = Истина;
    Иначе
        Результат = Ложь;
    КонецЕсли;

    Возврат Результат;

КонецФункции

Процедура ПараметрВКоллекцию(Параметр, Коллекция) Экспорт

    Значение = ПолучитьПараметр(Параметр);
    Коллекция.Вставить(Параметр, Значение);

КонецПроцедуры

Процедура ДвоичныеВКоллекцию(Параметр, Коллекция) Экспорт

    Значение = ПолучитьДвоичные(Параметр);
    Коллекция.Вставить(Параметр, Значение);

КонецПроцедуры

Процедура ЗаписатьПараметр(Параметр, Значение) Экспорт

    Путь = ПутьКФайлуДанных();
    ЗаписатьПараметрВФайл(Параметр, Значение, Путь);

КонецПроцедуры

//@skip-check method-too-many-params

Процедура Обработать(Знач Результат
    , Знач Библиотека
    , Знач Метод
    , Знач Вариант = ""
    , ДопПараметр1 = Неопределено
    , ДопПараметр2 = Неопределено
    , ДопПараметр3 = Неопределено) Экспорт

    УстановитьПризнакТестаCLI(Ложь);

    ОбработатьРезультатТестирования(Результат
        , Метод
        , Библиотека
        , Вариант
        , ДопПараметр1
        , ДопПараметр2
        , ДопПараметр3);

КонецПроцедуры

Процедура ОбработатьCLI(Знач Результат
    , Знач Библиотека
    , Знач Метод
    , Знач Вариант = ""
    , ДопПараметр1 = Неопределено
    , ДопПараметр2 = Неопределено
    , ДопПараметр3 = Неопределено) Экспорт

    УстановитьПризнакТестаCLI(Истина);

    ОбработатьРезультатТестирования(Результат
        , Метод
        , Библиотека
        , Вариант
        , ДопПараметр1
        , ДопПараметр2
        , ДопПараметр3);

КонецПроцедуры

Процедура УстановитьПризнакТестаCLI(Знач Значение) Экспорт

    CLITestsMark = ?(Значение, 1, 0);

    //@skip-check empty-except-statement
    Попытка

        УстановитьПеременнуюСреды("OINT_TESTS_CLI", CLITestsMark);

    Исключение КонецПопытки;

КонецПроцедуры

Процедура ВывестиСлужебнуюИнформацию(Знач Текст, Знач Примечание, Знач Библиотека) Экспорт

    ШаблонТекста = "
                   |--!!!---------%1----------!!!--
                   |
                   |%2
                   |
                   |%3
                   |
                   |---------------------------------";

    Сообщить(СтрШаблон(ШаблонТекста, Библиотека, Примечание, Текст));

КонецПроцедуры

#Область ReportPortal

Функция СоздатьЗапускReportPortal(Знач Платформа = "") Экспорт

    Токен  = ПолучитьПараметр("RPortal_Token");
    Проект = ПолучитьПараметр("RPortal_MainProject");
    URL    = ПолучитьПараметр("RPortal_URL");

    ЗавершитьЗапуск();

    ТекущаяДата         = ПолучитьВремяЗапуска();
    СистемнаяИнформация = Новый СистемнаяИнформация;

    ОперационнаяСистема = Строка(СистемнаяИнформация.ТипПлатформы);
    ТекущаяДатаСтрока   = Формат(ТекущаяДата, "ДФ=yyyy-MM-dd");
    UUID                = Строка(Новый УникальныйИдентификатор);
    ВерсияОПИ           = OPI_Инструменты.ВерсияОПИ();

    Если Не ЗначениеЗаполнено(Платформа) Тогда
        Платформа = ?(OPI_Инструменты.ЭтоOneScript(), "OneScript", "1C:Enterprise");
    КонецЕсли;

    ИмяЗапуска = СтрШаблон("%1 | %2 | %3 | %4", ТекущаяДатаСтрока, ВерсияОПИ, Платформа, ОперационнаяСистема);

    СтруктураЗапуска = Новый Структура;

    СтруктураЗапуска.Вставить("name"     , ИмяЗапуска);
    СтруктураЗапуска.Вставить("startTime", ТекущаяДата);
    СтруктураЗапуска.Вставить("uuid"     , UUID);

    ЗаписатьПараметр("RPortal_MainLaunch", UUID);

    Результат = ReportPortal().СоздатьЗапуск(URL, Токен, Проект, СтруктураЗапуска);
    UID       = Результат["id"];

    СоздатьФайлЗапуска(UID);

    Сообщить(OPI_Инструменты.JSONСтрокой(Результат));

    Возврат UID;

КонецФункции

Функция СоздатьНаборЗапуска(Знач Наименование) Экспорт

    Данные = ПолучитьСуществующийЗапуск();

    Если Данные = Неопределено Тогда
        Возврат Неопределено;
    КонецЕсли;

    СуществующиеНаборы = Данные["suites"];
    Существующий       = СуществующиеНаборы.Получить(Наименование);

    Если Существующий <> Неопределено Тогда
        Возврат Существующий;
    КонецЕсли;

    Токен  = ПолучитьПараметр("RPortal_Token");
    Проект = ПолучитьПараметр("RPortal_MainProject");
    URL    = ПолучитьПараметр("RPortal_URL");

    ТекущаяДата    = ПолучитьВремяЗапуска();
    ПоследнийНабор = Данные["last_suite"];

    Если ЗначениеЗаполнено(ПоследнийНабор) Тогда

        СтруктураЗавершения = Новый Структура("endTime,launchUuid", ТекущаяДата, ПоследнийНабор);
        ReportPortal().ЗавершитьЭлемент(URL, Токен, Проект, ПоследнийНабор, СтруктураЗавершения);

    КонецЕсли;

    UUID = Строка(Новый УникальныйИдентификатор);

    СтруктураЭлемента = Новый Структура;
    СтруктураЭлемента.Вставить("name"      , Наименование);
    СтруктураЭлемента.Вставить("startTime" , ТекущаяДата);
    СтруктураЭлемента.Вставить("type"      , "suite");
    СтруктураЭлемента.Вставить("launchUuid", Данные["id"]);
    СтруктураЭлемента.Вставить("uuid"      , UUID);

    ReportPortal().СоздатьЭлемент(URL, Токен, Проект, СтруктураЭлемента);

    СуществующиеНаборы.Вставить(Наименование, UUID);

    Данные.Вставить("suites"    , СуществующиеНаборы);
    Данные.Вставить("last_suite", UUID);

    ЗаписатьФайлЗапуска(Данные);

    Возврат UUID;

КонецФункции

Функция СоздатьТестовыйЭлемент(Знач Набор, Знач Библиотека, Знач Метод, Знач Вариант) Экспорт

    Данные = ПолучитьСуществующийЗапуск();

    Если Данные = Неопределено Тогда
        Возврат Неопределено;
    КонецЕсли;

    UUID        = Строка(Новый УникальныйИдентификатор);
    ТекущаяДата = ПолучитьВремяЗапуска();

    Если OPI_Инструменты.ЭтоOneScript() Тогда
        ВариантЗапуска  = "Общий";
        ОсноваЗаголовка = Метод;
    Иначе

        #Если Клиент Тогда
            ВариантЗапуска = "Клиент";
        #Иначе
            ВариантЗапуска = "Сервер";
        #КонецЕсли

        ОсноваЗаголовка = СтрШаблон("%1: %2", ВариантЗапуска, Метод);

    КонецЕсли;

    Если ЗначениеЗаполнено(Вариант) Тогда

        Заголовок     = СтрШаблон("%1 (%2)", ОсноваЗаголовка, Вариант);
        Идентификатор = СтрШаблон("%1_%2_%3_%4", ВариантЗапуска, Библиотека, Метод, Вариант);

    Иначе

        Заголовок     = ОсноваЗаголовка;
        Идентификатор = СтрШаблон("%1_%2_%3", ВариантЗапуска, Библиотека, Метод);

    КонецЕсли;

    Токен  = ПолучитьПараметр("RPortal_Token");
    Проект = ПолучитьПараметр("RPortal_MainProject");
    URL    = ПолучитьПараметр("RPortal_URL");

    СтруктураЭлемента = Новый Структура;

    СтруктураЭлемента.Вставить("name"      , Заголовок);
    СтруктураЭлемента.Вставить("startTime" , ТекущаяДата);
    СтруктураЭлемента.Вставить("uuid"      , UUID);
    СтруктураЭлемента.Вставить("type"      , "step");
    СтруктураЭлемента.Вставить("launchUuid", Данные["id"]);

    ReportPortal().СоздатьЭлемент(URL, Токен, Проект, СтруктураЭлемента, Набор);

    Данные["items"].Вставить(UUID, Идентификатор);

    ЗаписатьФайлЗапуска(Данные);

    Возврат UUID;

КонецФункции

Процедура ЗавершитьЗапуск() Экспорт

    Токен  = ПолучитьПараметр("RPortal_Token");
    Проект = ПолучитьПараметр("RPortal_MainProject");
    URL    = ПолучитьПараметр("RPortal_URL");

    ТекущаяДата = ПолучитьВремяЗапуска();

    СуществующийЗапуск = ПолучитьСуществующийЗапуск();

    Если ЗначениеЗаполнено(СуществующийЗапуск) Тогда

        ПоследнийНабор = СуществующийЗапуск["last_suite"];

        Если ЗначениеЗаполнено(ПоследнийНабор) Тогда

            СтруктураЗавершения = Новый Структура("endTime,launchUuid", ТекущаяДата, ПоследнийНабор);
            ReportPortal().ЗавершитьЭлемент(URL, Токен, Проект, ПоследнийНабор, СтруктураЗавершения);

        КонецЕсли;

        // ЗаписатьПропущенныеТесты();

        СтруктураЗавершения = ReportPortal().ПолучитьСтруктуруЗавершенияЗапуска(ТекущаяДата);
        ReportPortal().ЗавершитьЗапуск(URL, Токен, Проект, СуществующийЗапуск["id"], СтруктураЗавершения);

        СуществующийЗапуск["ended"] = Истина;
        ЗаписатьФайлЗапуска(СуществующийЗапуск);

    КонецЕсли;

КонецПроцедуры

Функция ПолучитьСписокВыполненныхТестов() Экспорт

    Тесты = ПрочитатьФайлЗапуска()["tests"];

    Возврат ?(Тесты = Неопределено, Новый Массив, Тесты);

КонецФункции

Функция ПолучитьПолныйСписокТестов() Экспорт

    Язык = OPI_Инструменты.ЯзыкОПИ();

    Тесты = СтрШаблон(
        "https://raw.githubusercontent.com/Bayselonarrend/OpenIntegrations/refs/heads/main/service/tests_%1.json", Язык);

    OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Тесты);

    Если Тесты.Количество() = 1 Или Не OPI_Инструменты.ЭтоКоллекция(Тесты[0], Истина) Тогда
        Возврат Новый Массив;
    Иначе
        Возврат Тесты;
    КонецЕсли;

КонецФункции

#КонецОбласти

#Область Параметризация

Функция ПолучитьВариантыПараметровFTP() Экспорт

    МассивВариантов = Новый Массив;

    ПараметрыТестаОсновные = Новый Структура;
    ПараметрВКоллекцию("FTP_IP"        , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("FTP_Port"      , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("FTPS_IP"       , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("FTPS_Port"     , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("FTP_User"      , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("FTP_Password"  , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("Proxy_User"    , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("Proxy_Password", ПараметрыТестаОсновные);
    ПараметрВКоллекцию("Socks5_IP"     , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("Socks5_Port"   , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("Proxy_IP"      , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("Proxy_Port"    , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("Picture"       , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("Big"           , ПараметрыТестаОсновные);

    Локалхост = ПолучитьLocalhost();

    Socks5IP                            = ПараметрыТестаОсновные["Socks5_IP"];
    ПараметрыТестаОсновные["Socks5_IP"] = ?(Socks5IP = "127.0.0.1", Локалхост, Socks5IP);

    HttpProxyIP                        = ПараметрыТестаОсновные["Proxy_IP"];
    ПараметрыТестаОсновные["Proxy_IP"] = ?(HttpProxyIP = "127.0.0.1", Локалхост, HttpProxyIP);

    // FTP
    СтруктураПараметров = Новый Структура;
    СтруктураПараметров.Вставить("Postfix", "FTP");
    СтруктураПараметров.Вставить("FTP_IP", Локалхост);
    СтруктураПараметров.Вставить("FTP_Port", ПараметрыТестаОсновные["FTP_Port"]);
    СтруктураПараметров.Вставить("FTP_User", ПараметрыТестаОсновные["FTP_User"]);
    СтруктураПараметров.Вставить("FTP_Password", ПараметрыТестаОсновные["FTP_Password"]);
    СтруктураПараметров.Вставить("Proxy_User", ПараметрыТестаОсновные["Proxy_User"]);
    СтруктураПараметров.Вставить("Proxy_Password", ПараметрыТестаОсновные["Proxy_Password"]);
    СтруктураПараметров.Вставить("Proxy_IP", ПараметрыТестаОсновные["Socks5_IP"]);
    СтруктураПараметров.Вставить("Proxy_Port", ПараметрыТестаОсновные["Socks5_Port"]);
    СтруктураПараметров.Вставить("Proxy_Type", "socks5");
    СтруктураПараметров.Вставить("Proxy", Ложь);
    СтруктураПараметров.Вставить("TLS", Ложь);
    СтруктураПараметров.Вставить("Picture", ПараметрыТестаОсновные["Picture"]);
    СтруктураПараметров.Вставить("Big", ПараметрыТестаОсновные["Big"]);
    МассивВариантов.Добавить(СтруктураПараметров);

    // FTPS
    СтруктураПараметров = Новый Структура;
    СтруктураПараметров.Вставить("Postfix", "FTPS");
    СтруктураПараметров.Вставить("FTP_IP", Локалхост);
    СтруктураПараметров.Вставить("FTP_Port", ПараметрыТестаОсновные["FTPS_Port"]);
    СтруктураПараметров.Вставить("FTP_User", ПараметрыТестаОсновные["FTP_User"]);
    СтруктураПараметров.Вставить("FTP_Password", ПараметрыТестаОсновные["FTP_Password"]);
    СтруктураПараметров.Вставить("Proxy_User", ПараметрыТестаОсновные["Proxy_User"]);
    СтруктураПараметров.Вставить("Proxy_Password", ПараметрыТестаОсновные["Proxy_Password"]);
    СтруктураПараметров.Вставить("Proxy_IP", ПараметрыТестаОсновные["Socks5_IP"]);
    СтруктураПараметров.Вставить("Proxy_Port", ПараметрыТестаОсновные["Socks5_Port"]);
    СтруктураПараметров.Вставить("Proxy_Type", "socks5");
    СтруктураПараметров.Вставить("Proxy", Ложь);
    СтруктураПараметров.Вставить("TLS", Истина);
    СтруктураПараметров.Вставить("Picture", ПараметрыТестаОсновные["Picture"]);
    СтруктураПараметров.Вставить("Big", ПараметрыТестаОсновные["Big"]);
    МассивВариантов.Добавить(СтруктураПараметров);

    // FTP + Socks5
    СтруктураПараметров = Новый Структура;
    СтруктураПараметров.Вставить("Postfix", "FTP, Socks5");
    СтруктураПараметров.Вставить("FTP_IP", ПараметрыТестаОсновные["FTP_IP"]);
    СтруктураПараметров.Вставить("FTP_Port", ПараметрыТестаОсновные["FTP_Port"]);
    СтруктураПараметров.Вставить("FTP_User", ПараметрыТестаОсновные["FTP_User"]);
    СтруктураПараметров.Вставить("FTP_Password", ПараметрыТестаОсновные["FTP_Password"]);
    СтруктураПараметров.Вставить("Proxy_User", ПараметрыТестаОсновные["Proxy_User"]);
    СтруктураПараметров.Вставить("Proxy_Password", ПараметрыТестаОсновные["Proxy_Password"]);
    СтруктураПараметров.Вставить("Proxy_IP", ПараметрыТестаОсновные["Socks5_IP"]);
    СтруктураПараметров.Вставить("Proxy_Port", ПараметрыТестаОсновные["Socks5_Port"]);
    СтруктураПараметров.Вставить("Proxy_Type", "socks5");
    СтруктураПараметров.Вставить("Proxy", Истина);
    СтруктураПараметров.Вставить("TLS", Ложь);
    СтруктураПараметров.Вставить("Picture", ПараметрыТестаОсновные["Picture"]);
    СтруктураПараметров.Вставить("Big", ПараметрыТестаОсновные["Big"]);
    МассивВариантов.Добавить(СтруктураПараметров);

    // FTPS + Socks5
    СтруктураПараметров = Новый Структура;
    СтруктураПараметров.Вставить("Postfix", ?(OPI_Инструменты.ЭтоWindows(), "FTPS, Socks5", ""));
    СтруктураПараметров.Вставить("FTP_IP", ПараметрыТестаОсновные["FTPS_IP"]);
    СтруктураПараметров.Вставить("FTP_Port", ПараметрыТестаОсновные["FTP_Port"]);
    СтруктураПараметров.Вставить("FTP_User", ПараметрыТестаОсновные["FTP_User"]);
    СтруктураПараметров.Вставить("FTP_Password", ПараметрыТестаОсновные["FTP_Password"]);
    СтруктураПараметров.Вставить("Proxy_User", ПараметрыТестаОсновные["Proxy_User"]);
    СтруктураПараметров.Вставить("Proxy_Password", ПараметрыТестаОсновные["Proxy_Password"]);
    СтруктураПараметров.Вставить("Proxy_IP", ПараметрыТестаОсновные["Socks5_IP"]);
    СтруктураПараметров.Вставить("Proxy_Port", ПараметрыТестаОсновные["Socks5_Port"]);
    СтруктураПараметров.Вставить("Proxy_Type", "socks5");
    СтруктураПараметров.Вставить("Proxy", Истина);
    СтруктураПараметров.Вставить("TLS", Истина);
    СтруктураПараметров.Вставить("Picture", ПараметрыТестаОсновные["Picture"]);
    СтруктураПараметров.Вставить("Big", ПараметрыТестаОсновные["Big"]);
    МассивВариантов.Добавить(СтруктураПараметров);

    Если Ложь Тогда

        // FTP + HTTP
        СтруктураПараметров = Новый Структура;
        СтруктураПараметров.Вставить("Postfix", "FTP, HTTP");
        СтруктураПараметров.Вставить("FTP_IP", ПараметрыТестаОсновные["FTP_IP"]);
        СтруктураПараметров.Вставить("FTP_Port", ПараметрыТестаОсновные["FTP_Port"]);
        СтруктураПараметров.Вставить("FTP_User", ПараметрыТестаОсновные["FTP_User"]);
        СтруктураПараметров.Вставить("FTP_Password", ПараметрыТестаОсновные["FTP_Password"]);
        СтруктураПараметров.Вставить("Proxy_User", ПараметрыТестаОсновные["Proxy_User"]);
        СтруктураПараметров.Вставить("Proxy_Password", ПараметрыТестаОсновные["Proxy_Password"]);
        СтруктураПараметров.Вставить("Proxy_IP", ПараметрыТестаОсновные["Proxy_IP"]);
        СтруктураПараметров.Вставить("Proxy_Port", ПараметрыТестаОсновные["Proxy_Port"]);
        СтруктураПараметров.Вставить("Proxy_Type", "http");
        СтруктураПараметров.Вставить("Proxy", Истина);
        СтруктураПараметров.Вставить("TLS", Ложь);
        СтруктураПараметров.Вставить("Picture", ПараметрыТестаОсновные["Picture"]);
        СтруктураПараметров.Вставить("Big", ПараметрыТестаОсновные["Big"]);
        МассивВариантов.Добавить(СтруктураПараметров);

        // FTPS + HTTP
        СтруктураПараметров = Новый Структура;
        СтруктураПараметров.Вставить("Postfix", "");
        СтруктураПараметров.Вставить("FTP_IP", ПараметрыТестаОсновные["FTPS_IP"]);
        СтруктураПараметров.Вставить("FTP_Port", ПараметрыТестаОсновные["FTP_Port"]);
        СтруктураПараметров.Вставить("FTP_User", ПараметрыТестаОсновные["FTP_User"]);
        СтруктураПараметров.Вставить("FTP_Password", ПараметрыТестаОсновные["FTP_Password"]);
        СтруктураПараметров.Вставить("Proxy_User", ПараметрыТестаОсновные["Proxy_User"]);
        СтруктураПараметров.Вставить("Proxy_Password", ПараметрыТестаОсновные["Proxy_Password"]);
        СтруктураПараметров.Вставить("Proxy_IP", ПараметрыТестаОсновные["Proxy_IP"]);
        СтруктураПараметров.Вставить("Proxy_Port", ПараметрыТестаОсновные["Proxy_Port"]);
        СтруктураПараметров.Вставить("Proxy_Type", "http");
        СтруктураПараметров.Вставить("Proxy", Истина);
        СтруктураПараметров.Вставить("TLS", Истина);
        СтруктураПараметров.Вставить("Picture", ПараметрыТестаОсновные["Picture"]);
        СтруктураПараметров.Вставить("Big", ПараметрыТестаОсновные["Big"]);
        МассивВариантов.Добавить(СтруктураПараметров);

    КонецЕсли;

    Возврат МассивВариантов;

КонецФункции

Функция ПолучитьВариантыПараметровWebSocket() Экспорт

    МассивВариантов = Новый Массив;

    ПараметрыТестаОсновные = Новый Структура;
    ПараметрВКоллекцию("WS_IP"           , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("WS_Port"         , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("WS_InternalPort" , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("WSS_IP"          , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("WSS_Port"        , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("WSS_InternalPort", ПараметрыТестаОсновные);
    ПараметрВКоллекцию("Proxy_User"      , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("Proxy_Password"  , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("Proxy_IP"        , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("Proxy_Port"      , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("Socks5_IP"       , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("Socks5_Port"     , ПараметрыТестаОсновные);

    Локалхост = ПолучитьLocalhost();

    Socks5IP                            = ПараметрыТестаОсновные["Socks5_IP"];
    ПараметрыТестаОсновные["Socks5_IP"] = ?(Socks5IP = "127.0.0.1", Локалхост, Socks5IP);

    HttpProxyIP                        = ПараметрыТестаОсновные["Proxy_IP"];
    ПараметрыТестаОсновные["Proxy_IP"] = ?(HttpProxyIP = "127.0.0.1", Локалхост, HttpProxyIP);

    // WS
    СтруктураПараметров = Новый Структура;
    СтруктураПараметров.Вставить("Postfix", "WS");
    СтруктураПараметров.Вставить("WS_IP", Локалхост);
    СтруктураПараметров.Вставить("WS_Port", ПараметрыТестаОсновные["WS_Port"]);
    СтруктураПараметров.Вставить("Proxy_User", ПараметрыТестаОсновные["Proxy_User"]);
    СтруктураПараметров.Вставить("Proxy_Password", ПараметрыТестаОсновные["Proxy_Password"]);
    СтруктураПараметров.Вставить("Proxy_IP", ПараметрыТестаОсновные["Socks5_IP"]);
    СтруктураПараметров.Вставить("Proxy_Port", ПараметрыТестаОсновные["Socks5_Port"]);
    СтруктураПараметров.Вставить("Proxy_Type", "socks5");
    СтруктураПараметров.Вставить("Proxy", Ложь);
    СтруктураПараметров.Вставить("TLS", Ложь);
    МассивВариантов.Добавить(СтруктураПараметров);

    // WSS
    СтруктураПараметров = Новый Структура;
    СтруктураПараметров.Вставить("Postfix", "WSS");
    СтруктураПараметров.Вставить("WS_IP", Локалхост);
    СтруктураПараметров.Вставить("WS_Port", ПараметрыТестаОсновные["WSS_Port"]);
    СтруктураПараметров.Вставить("Proxy_User", ПараметрыТестаОсновные["Proxy_User"]);
    СтруктураПараметров.Вставить("Proxy_Password", ПараметрыТестаОсновные["Proxy_Password"]);
    СтруктураПараметров.Вставить("Proxy_IP", ПараметрыТестаОсновные["Socks5_IP"]);
    СтруктураПараметров.Вставить("Proxy_Port", ПараметрыТестаОсновные["Socks5_Port"]);
    СтруктураПараметров.Вставить("Proxy_Type", "socks5");
    СтруктураПараметров.Вставить("Proxy", Ложь);
    СтруктураПараметров.Вставить("TLS", Истина);
    МассивВариантов.Добавить(СтруктураПараметров);

    // WS + Socks5
    СтруктураПараметров = Новый Структура;
    СтруктураПараметров.Вставить("Postfix", "WS, Socks5");
    СтруктураПараметров.Вставить("WS_IP", ПараметрыТестаОсновные["WS_IP"]);
    СтруктураПараметров.Вставить("WS_Port", ПараметрыТестаОсновные["WS_InternalPort"]);
    СтруктураПараметров.Вставить("Proxy_User", ПараметрыТестаОсновные["Proxy_User"]);
    СтруктураПараметров.Вставить("Proxy_Password", ПараметрыТестаОсновные["Proxy_Password"]);
    СтруктураПараметров.Вставить("Proxy_IP", ПараметрыТестаОсновные["Socks5_IP"]);
    СтруктураПараметров.Вставить("Proxy_Port", ПараметрыТестаОсновные["Socks5_Port"]);
    СтруктураПараметров.Вставить("Proxy_Type", "socks5");
    СтруктураПараметров.Вставить("Proxy", Истина);
    СтруктураПараметров.Вставить("TLS", Ложь);
    МассивВариантов.Добавить(СтруктураПараметров);

    // WSS + Socks5
    СтруктураПараметров = Новый Структура;
    СтруктураПараметров.Вставить("Postfix", "");
    СтруктураПараметров.Вставить("WS_IP", ПараметрыТестаОсновные["WSS_IP"]);
    СтруктураПараметров.Вставить("WS_Port", ПараметрыТестаОсновные["WSS_InternalPort"]);
    СтруктураПараметров.Вставить("Proxy_User", ПараметрыТестаОсновные["Proxy_User"]);
    СтруктураПараметров.Вставить("Proxy_Password", ПараметрыТестаОсновные["Proxy_Password"]);
    СтруктураПараметров.Вставить("Proxy_IP", ПараметрыТестаОсновные["Socks5_IP"]);
    СтруктураПараметров.Вставить("Proxy_Port", ПараметрыТестаОсновные["Socks5_Port"]);
    СтруктураПараметров.Вставить("Proxy_Type", "socks5");
    СтруктураПараметров.Вставить("Proxy", Истина);
    СтруктураПараметров.Вставить("TLS", Истина);
    МассивВариантов.Добавить(СтруктураПараметров);

    // WS + HTTP
    СтруктураПараметров = Новый Структура;
    СтруктураПараметров.Вставить("Postfix", "WS, HTTP");
    СтруктураПараметров.Вставить("WS_IP", ПараметрыТестаОсновные["WS_IP"]);
    СтруктураПараметров.Вставить("WS_Port", ПараметрыТестаОсновные["WS_InternalPort"]);
    СтруктураПараметров.Вставить("Proxy_User", ПараметрыТестаОсновные["Proxy_User"]);
    СтруктураПараметров.Вставить("Proxy_Password", ПараметрыТестаОсновные["Proxy_Password"]);
    СтруктураПараметров.Вставить("Proxy_IP", ПараметрыТестаОсновные["Proxy_IP"]);
    СтруктураПараметров.Вставить("Proxy_Port", ПараметрыТестаОсновные["Proxy_Port"]);
    СтруктураПараметров.Вставить("Proxy_Type", "http");
    СтруктураПараметров.Вставить("Proxy", Истина);
    СтруктураПараметров.Вставить("TLS", Ложь);
    МассивВариантов.Добавить(СтруктураПараметров);

    // WSS + HTTP
    СтруктураПараметров = Новый Структура;
    СтруктураПараметров.Вставить("Postfix", "WSS, HTTP");
    СтруктураПараметров.Вставить("WS_IP", ПараметрыТестаОсновные["WSS_IP"]);
    СтруктураПараметров.Вставить("WS_Port", ПараметрыТестаОсновные["WSS_InternalPort"]);
    СтруктураПараметров.Вставить("Proxy_User", ПараметрыТестаОсновные["Proxy_User"]);
    СтруктураПараметров.Вставить("Proxy_Password", ПараметрыТестаОсновные["Proxy_Password"]);
    СтруктураПараметров.Вставить("Proxy_IP", ПараметрыТестаОсновные["Proxy_IP"]);
    СтруктураПараметров.Вставить("Proxy_Port", ПараметрыТестаОсновные["Proxy_Port"]);
    СтруктураПараметров.Вставить("Proxy_Type", "http");
    СтруктураПараметров.Вставить("Proxy", Истина);
    СтруктураПараметров.Вставить("TLS", Истина);
    МассивВариантов.Добавить(СтруктураПараметров);

    Возврат МассивВариантов;

КонецФункции

Функция ПолучитьВариантыПараметровSSH() Экспорт

    МассивВариантов = Новый Массив;

    ПараметрыТестаОсновные = Новый Структура;
    ПараметрВКоллекцию("Picture"       , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("Big"           , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("SSH_Host"      , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("SSH_HostKI"    , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("SSH_Port"      , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("SSH_PortKI"    , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("SSH_User"      , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("SSH_Password"  , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("SSH_Key"       , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("SSH_Pub"       , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("Proxy_User"    , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("Proxy_Password", ПараметрыТестаОсновные);
    ПараметрВКоллекцию("Socks5_IP"     , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("Socks5_Port"   , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("Proxy_IP"      , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("Proxy_Port"    , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("Access_Token"  , ПараметрыТестаОсновные);

    Локалхост = ПолучитьLocalhost();

    Socks5IP                            = ПараметрыТестаОсновные["Socks5_IP"];
    ПараметрыТестаОсновные["Socks5_IP"] = ?(Socks5IP = "127.0.0.1", Локалхост, Socks5IP);

    HttpProxyIP                        = ПараметрыТестаОсновные["Proxy_IP"];
    ПараметрыТестаОсновные["Proxy_IP"] = ?(HttpProxyIP = "127.0.0.1", Локалхост, HttpProxyIP);

    АдресВСети   = ПараметрыТестаОсновные["SSH_Host"];
    АдресВСетиKI = ПараметрыТестаОсновные["SSH_HostKI"];

    ПараметрыТестаОсновные.Вставить("SSH_Host", Локалхост);

    ПриватныйКлюч = ПолучитьИмяВременногоФайла();
    Токен         = ПараметрыТестаОсновные["Access_Token"];
    OPI_ЗапросыHTTP.НовыйЗапрос().Инициализировать(ПараметрыТестаОсновные["SSH_Key"]).ДобавитьBearerАвторизацию(
        Токен).ОбработатьЗапрос("GET").ВернутьОтветКакДвоичныеДанные().Записать(ПриватныйКлюч);

    ПараметрыТестаОсновные.Вставить("SSH_Key", ПриватныйКлюч);

    ПараметрыТестаОсновные.Вставить("Proxy"     , Ложь);
    ПараметрыТестаОсновные.Вставить("Proxy_Type", "none");

    ПараметрыТеста = OPI_Инструменты.КопироватьКоллекцию(ПараметрыТестаОсновные);
    ПараметрыТеста.Вставить("AuthType", "По логину и паролю");
    ПараметрыТеста.Вставить("Postfix" , "По логину и паролю");
    МассивВариантов.Добавить(ПараметрыТеста);

    ПараметрыТеста = OPI_Инструменты.КопироватьКоллекцию(ПараметрыТестаОсновные);
    ПараметрыТеста.Вставить("AuthType", "По ключу");
    ПараметрыТеста.Вставить("Postfix" , "По ключу");
    МассивВариантов.Добавить(ПараметрыТеста);

    ПараметрыТеста = OPI_Инструменты.КопироватьКоллекцию(ПараметрыТестаОсновные);
    ПараметрыТеста.Вставить("AuthType", "Keyboard interactive");
    ПараметрыТеста.Вставить("Postfix" , "Keyboard interactive");
    МассивВариантов.Добавить(ПараметрыТеста);

    ПараметрыТеста = OPI_Инструменты.КопироватьКоллекцию(ПараметрыТестаОсновные);
    ПараметрыТеста.Вставить("AuthType", "Через SSH-агента");
    ПараметрыТеста.Вставить("Postfix" , "Через SSH-агента");
    //МассивВариантов.Добавить(ПараметрыТеста);

    Для Н = 0 По МассивВариантов.ВГраница() Цикл

        ПараметрыТестаПрокси = OPI_Инструменты.КопироватьКоллекцию(МассивВариантов[Н]);

        Префикс = ?(ПараметрыТестаПрокси["Postfix"] = "По логину и паролю", "", СтрШаблон("%1, SOCKS5",
            ПараметрыТестаПрокси["Postfix"]));

        ТекущийАдрес = ?(ПараметрыТестаПрокси["Postfix"] = "Keyboard interactive"
            , АдресВСетиKI
            , АдресВСети);

        ПараметрыТестаПрокси.Вставить("SSH_Host"  , ТекущийАдрес);
        ПараметрыТестаПрокси.Вставить("Proxy"     , Истина);
        ПараметрыТестаПрокси.Вставить("Proxy_Type", "socks5");
        ПараметрыТестаПрокси.Вставить("Postfix"   , Префикс);

        ПараметрыТестаПрокси.Вставить("Proxy_IP"  , ПараметрыТестаПрокси["Socks5_IP"]);
        ПараметрыТестаПрокси.Вставить("Proxy_Port", ПараметрыТестаПрокси["Socks5_Port"]);
        МассивВариантов.Добавить(ПараметрыТестаПрокси);

        ПараметрыТестаПрокси = OPI_Инструменты.КопироватьКоллекцию(МассивВариантов[Н]);

        ПараметрыТестаПрокси.Вставить("SSH_Host"  , ТекущийАдрес);
        ПараметрыТестаПрокси.Вставить("Proxy"     , Истина);
        ПараметрыТестаПрокси.Вставить("Proxy_Type", "http");
        ПараметрыТестаПрокси.Вставить("Postfix"   , СтрШаблон("%1, HTTP", ПараметрыТестаПрокси["Postfix"]));

        МассивВариантов.Добавить(ПараметрыТестаПрокси);

    КонецЦикла;

    Возврат МассивВариантов;

КонецФункции

Функция ПолучитьВариантыПараметровS3() Экспорт

    GpBucket  = Лев(Строка(Новый УникальныйИдентификатор), 8);
    DirBucket = Лев(Строка(Новый УникальныйИдентификатор), 8);

    МассивВариантов = Новый Массив;

    ПараметрыТестаОсновные = Новый Структура;
    ПараметрВКоллекцию("S3_AccessKey", ПараметрыТестаОсновные);
    ПараметрВКоллекцию("S3_SecretKey", ПараметрыТестаОсновные);
    ПараметрВКоллекцию("S3_URL"      , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("Picture"     , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("Audio"       , ПараметрыТестаОсновные);

    ПараметрыТестаОсновные.Вставить("S3_GPB", GpBucket);
    ПараметрыТестаОсновные.Вставить("S3_DB" , DirBucket);

    ПараметрыТеста = OPI_Инструменты.КопироватьКоллекцию(ПараметрыТестаОсновные);
    ПараметрыТеста.Вставить("Directory", Ложь);
    МассивВариантов.Добавить(ПараметрыТеста);

    ПараметрыТеста = OPI_Инструменты.КопироватьКоллекцию(ПараметрыТестаОсновные);
    ПараметрыТеста.Вставить("Directory", Истина);
    МассивВариантов.Добавить(ПараметрыТеста);

    Возврат МассивВариантов;

КонецФункции

Функция ПолучитьВариантыПараметровPostgres() Экспорт

    МассивВариантов = Новый Массив;

    ПараметрыТестаОсновные = Новый Структура;
    ПараметрВКоллекцию("PG_IP"      , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("PG_Password", ПараметрыТестаОсновные);
    ПараметрВКоллекцию("Picture"    , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("SQL"        , ПараметрыТестаОсновные);

    ПараметрыТеста = OPI_Инструменты.КопироватьКоллекцию(ПараметрыТестаОсновные);

    ПараметрыТеста.Вставить("TLS" , Ложь);
    ПараметрыТеста.Вставить("Port", 5432);

    МассивВариантов.Добавить(ПараметрыТеста);

    ПараметрыТеста = OPI_Инструменты.КопироватьКоллекцию(ПараметрыТестаОсновные);

    ПараметрыТеста.Вставить("TLS" , Истина);
    ПараметрыТеста.Вставить("Port", 5433);

    МассивВариантов.Добавить(ПараметрыТеста);

    Возврат МассивВариантов;

КонецФункции

Функция ПолучитьВариантыПараметровMySQL() Экспорт

    МассивВариантов = Новый Массив;

    ПараметрыТестаОсновные = Новый Структура;
    ПараметрВКоллекцию("PG_IP"      , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("PG_Password", ПараметрыТестаОсновные);
    ПараметрВКоллекцию("Picture"    , ПараметрыТестаОсновные);
    ПараметрВКоллекцию("SQL2"       , ПараметрыТестаОсновные);

    ПараметрыТеста = OPI_Инструменты.КопироватьКоллекцию(ПараметрыТестаОсновные);

    ПараметрыТеста.Вставить("TLS" , Ложь);
    ПараметрыТеста.Вставить("Port", 3306);

    МассивВариантов.Добавить(ПараметрыТеста);

    ПараметрыТеста = OPI_Инструменты.КопироватьКоллекцию(ПараметрыТестаОсновные);

    ПараметрыТеста.Вставить("TLS" , Истина);
    ПараметрыТеста.Вставить("Port", 3307);

    МассивВариантов.Добавить(ПараметрыТеста);

    Возврат МассивВариантов;

КонецФункции

Функция ПолучитьМассивТегов(Индекс) Экспорт

    МассивТегов = Новый Массив;

    Если Индекс <= 3 Тогда
        МассивТегов.Добавить("новинка");
    КонецЕсли;

    Если Индекс % 2 = 0 Тогда
        МассивТегов.Добавить("распродажа");
    КонецЕсли;

    Если Индекс % 3 = 0 Тогда
        МассивТегов.Добавить("популярный");
    КонецЕсли;

    Если Индекс >= 12 Тогда
        МассивТегов.Добавить("хит");
    КонецЕсли;

    Возврат МассивТегов;

КонецФункции

Функция ПолучитьТестовуюКоллекциюJanx(Знач Вариант) Экспорт

    Если Вариант = "НесколькоБинарников" Тогда

        Карта = Новый Соответствие;
        Карта.Вставить("alpha", ПолучитьДвоичныеДанныеИзHexСтроки("010203"));
        Карта.Вставить("beta", ПолучитьДвоичныеДанныеИзHexСтроки("AABBCCDDEE"));
        Карта.Вставить("gamma", ПолучитьДвоичныеДанныеИзHexСтроки("FF00"));

        Вложенная = Новый Соответствие;
        Вложенная.Вставить("inner", ПолучитьДвоичныеДанныеИзHexСтроки("DEADBEEF"));
        Вложенная.Вставить("label", "nested");
        Карта.Вставить("nested", Вложенная);

        Мета = Новый Массив;
        Мета.Добавить("x");
        Мета.Добавить(42);
        Карта.Вставить("meta", Мета);

        Возврат Карта;

    ИначеЕсли Вариант = "LuaСложныеДанные" Тогда

        Карта = Новый Соответствие;
        Карта.Вставить("alpha", ПолучитьДвоичныеДанныеИзСтроки("alpha-payload", "UTF-8"));
        Карта.Вставить("beta", ПолучитьДвоичныеДанныеИзСтроки("beta-payload", "UTF-8"));
        Карта.Вставить("gamma", ПолучитьДвоичныеДанныеИзСтроки("gamma-payload", "UTF-8"));

        Вложенная = Новый Соответствие;
        Вложенная.Вставить("inner", ПолучитьДвоичныеДанныеИзСтроки("inner-payload", "UTF-8"));
        Вложенная.Вставить("label", "nested");
        Карта.Вставить("nested", Вложенная);

        Мета = Новый Массив;
        Мета.Добавить("x");
        Мета.Добавить(42);
        Карта.Вставить("meta", Мета);

        Возврат Карта;

    ИначеЕсли Вариант = "МассивДвоичников" Тогда

        МассивБин = Новый Массив;
        МассивБин.Добавить(ПолучитьДвоичныеДанныеИзHexСтроки("01"));
        МассивБин.Добавить(ПолучитьДвоичныеДанныеИзHexСтроки("020304"));
        МассивБин.Добавить(ПолучитьДвоичныеДанныеИзHexСтроки("0506070809"));

        Карта = Новый Соответствие;
        Карта.Вставить("chunks", МассивБин);
        Карта.Вставить("count", 3);

        Возврат Карта;

    ИначеЕсли Вариант = "МассивСмешанный" Тогда

        Массив = Новый Массив;
        Массив.Добавить(1);
        Массив.Добавить("text");
        Массив.Добавить(ПолучитьДвоичныеДанныеИзHexСтроки("0A0B"));

        ВложеннаяКарта = Новый Соответствие;
        ВложеннаяКарта.Вставить("k", "v");
        ВложеннаяКарта.Вставить("bin", ПолучитьДвоичныеДанныеИзHexСтроки("112233"));
        Массив.Добавить(ВложеннаяКарта);

        ВложенныйМассив = Новый Массив;
        ВложенныйМассив.Добавить(Ложь);
        ВложенныйМассив.Добавить(ПолучитьДвоичныеДанныеИзHexСтроки("445566"));
        Массив.Добавить(ВложенныйМассив);

        Возврат Массив;

    ИначеЕсли Вариант = "LuaМассивСмешанный" Тогда

        Массив = Новый Массив;
        Массив.Добавить(1);
        Массив.Добавить("text");
        Массив.Добавить(ПолучитьДвоичныеДанныеИзСтроки("item-payload", "UTF-8"));

        ВложеннаяКарта = Новый Соответствие;
        ВложеннаяКарта.Вставить("k", "v");
        ВложеннаяКарта.Вставить("bin", ПолучитьДвоичныеДанныеИзСтроки("map-payload", "UTF-8"));
        Массив.Добавить(ВложеннаяКарта);

        ВложенныйМассив = Новый Массив;
        ВложенныйМассив.Добавить(Ложь);
        ВложенныйМассив.Добавить(ПолучитьДвоичныеДанныеИзСтроки("arr-payload", "UTF-8"));
        Массив.Добавить(ВложенныйМассив);

        Возврат Массив;

    ИначеЕсли Вариант = "ГлубокаяВложенность" Тогда

        Уровень3 = Новый Соответствие;
        Уровень3.Вставить("blob", ПолучитьДвоичныеДанныеИзHexСтроки("CAFEBABE"));

        Уровень2 = Новый Соответствие;
        Уровень2.Вставить("level3", Уровень3);
        Уровень2.Вставить("values", Новый Массив);
        Уровень2["values"].Добавить(7);
        Уровень2["values"].Добавить(ПолучитьДвоичныеДанныеИзHexСтроки("99"));

        Уровень1 = Новый Соответствие;
        Уровень1.Вставить("level2", Уровень2);
        Уровень1.Вставить("flag", Истина);

        Возврат Уровень1;

    ИначеЕсли Вариант = "ПустыеИСпециальные" Тогда

        Карта = Новый Соответствие;
        Карта.Вставить("empty_str", "");
        Карта.Вставить("zero", 0);
        Карта.Вставить("false", Ложь);
        Карта.Вставить("empty_bin", ПолучитьДвоичныеДанныеИзСтроки(""));
        Карта.Вставить("list", Новый Массив);
        Карта["list"].Добавить(ПолучитьДвоичныеДанныеИзHexСтроки("00"));

        Возврат Карта;

    КонецЕсли;

    ВызватьИсключение "Неизвестный вариант тестовой коллекции Janx: " + Вариант;

КонецФункции

#КонецОбласти

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

#Область Проверки

Функция Проверка_Core_ПроверитьСоответствиеИБПоследнейСборке(Знач Результат, Знач Вариант, Знач СуммаПоследний)

    //@skip-check use-non-recommended-method
    Сообщить(СтрШаблон("Current IB build: %1", Результат));
    //@skip-check use-non-recommended-method
    Сообщить(СтрШаблон("Last project build: %1", СуммаПоследний));

    ОжидаетЧто(Результат).Равно(СуммаПоследний);

    Возврат Неопределено;

КонецФункции

Функция Проверка_Core_ВызватьСНастройками(Знач Результат, Знач Вариант)

    ТипРезультата = ТипЗнч(Результат);

    ОжидаетЧто(ТипРезультата = Тип("Структура") Или ТипРезультата = Тип("Соответствие")).Равно(Истина);
    ОжидаетЧто(Результат["status"]).Заполнено();
    ОжидаетЧто(Результат["body"]).Заполнено();
    ОжидаетЧто(Результат["headers"]).Заполнено();

    Возврат Неопределено;

КонецФункции

Функция Проверка_Core_ВызовВФЗ(Знач Результат, Знач Вариант)

    #Если Не Клиент Тогда

        ЭтоOneScript   = OPI_Инструменты.ЭтоOneScript();
        ФоновоеЗадание = ?(ЭтоOneScript
            , Результат
            , Результат["ФоновоеЗадание"]);

        Попытка
            ФоновоеЗадание.ОжидатьЗавершения();
        Исключение

            ВызватьИсключение ПодробноеПредставлениеОшибки(?(ЭтоOneScript
                , ФоновоеЗадание.ИнформацияОбОшибке
                , ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЗадание.УникальныйИдентификатор).ИнформацияОбОшибке));

        КонецПопытки;

        Если Не ЭтоOneScript Тогда
            ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЗадание.УникальныйИдентификатор);
        КонецЕсли;

        ОжидаетЧто(ФоновоеЗадание.Состояние).Равно(СостояниеФоновогоЗадания.Завершено);

        Если ЭтоOneScript Тогда
            ДанныеРезультата = ФоновоеЗадание.Результат;
        Иначе
        КонецЕсли;

        Если Не ЗначениеЗаполнено(Вариант) Тогда

            ОжидаетЧто(ДанныеРезультата.Свойство("status")).Равно(Истина);
            ОжидаетЧто(ДанныеРезультата.Свойство("headers")).Равно(Истина);
            ОжидаетЧто(ДанныеРезультата.Свойство("body")).Равно(Истина);

        ИначеЕсли Вариант = "ВозвратДД" Тогда

            ОжидаетЧто(ТипЗнч(ДанныеРезультата)).Равно(Тип("ДвоичныеДанные"));

        ИначеЕсли Вариант = "ВозвратДДСтруктура" Тогда

            ОжидаетЧто(ДанныеРезультата.Свойство("status")).Равно(Истина);
            ОжидаетЧто(ДанныеРезультата.Свойство("headers")).Равно(Истина);
            ОжидаетЧто(ТипЗнч(ДанныеРезультата["body"])).Равно(Тип("ДвоичныеДанные"));

        КонецЕсли;

    #КонецЕсли

    Возврат Неопределено;

КонецФункции

Функция Проверка_Core_ПолучитьДоступныеНастройки(Знач Результат, Знач Вариант)

    ОжидаетЧто(ТипЗнч(Результат) = Тип("Строка")).Равно(Истина);
    ОжидаетЧто(ЗначениеЗаполнено(Результат)).Равно(Истина);
    ОжидаетЧто(СтрНайти(Результат, "adv_response") > 0).Равно(Истина);

    Возврат Неопределено;

КонецФункции

Функция Проверка_Telegram_ПолучитьИнформациюБота(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["result"]["username"]).Заполнено();

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_ПолучитьОбновления(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["result"]).ИмеетТип("Массив");

    OPI_Инструменты.Пауза(2);

    Возврат Неопределено;

КонецФункции

Функция Проверка_Telegram_УстановитьWebhook(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["description"]).Равно("Webhook was set");

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_УдалитьWebhook(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["description"]).Заполнено();

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_ОтправитьТекстовоеСообщение(Знач Результат, Знач Вариант, Параметры = "", Текст = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Если Не ЗначениеЗаполнено(Вариант) Тогда

        ИмяПараметра = "Telegram_MessageID";
        ОжидаетЧто(Результат["result"]["text"]).Равно(Текст);

    ИначеЕсли Вариант = "Канал" Тогда

        ИмяПараметра = "Telegram_ChannelMessageID";
        ОжидаетЧто(Результат["result"]["text"]).Равно(Текст);

    Иначе
        ИмяПараметра = "";
    КонецЕсли;

    Если ЗначениеЗаполнено(ИмяПараметра) Тогда

        IDСообщения = OPI_Инструменты.ЧислоВСтроку(Результат["result"]["message_id"]);
        ЗаписатьПараметр(ИмяПараметра, IDСообщения);
        OPI_Инструменты.ДобавитьПоле(ИмяПараметра, IDСообщения, "Строка", Параметры);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_СформироватьКлавиатуруПоМассивуКнопок(Знач Результат, Знач Вариант)

    ТипРезультат = ТипЗнч(Результат);

    ОжидаетЧто(ТипРезультат = Тип("Строка") Или ТипРезультат = Тип("Соответствие")).Равно(Истина);
    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_ОтправитьКартинку(Знач Результат, Знач Вариант, Параметры = "", Текст = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Если Вариант <> "Текст + Emoji" И Вариант <> "Сложный" Тогда
        ОжидаетЧто(Результат["result"]["caption"]).Равно(Текст);
    КонецЕсли;

    ОжидаетЧто(Результат["result"]["photo"]).ИмеетТип("Массив");

    Если Не ЗначениеЗаполнено(Вариант) Тогда

        IDСообщения = OPI_Инструменты.ЧислоВСтроку(Результат["result"]["message_id"]);
        ЗаписатьПараметр("Telegram_PicMessageID", IDСообщения);
        OPI_Инструменты.ДобавитьПоле("Telegram_PicMessageID", IDСообщения, "Строка", Параметры);

    КонецЕсли;

    Если Вариант = "Клавиатура коллекция" Тогда

        IDФайла = Результат["result"]["photo"][0]["file_id"];
        ЗаписатьПараметр("Telegram_FileID", IDФайла);
        Параметры.Вставить("Telegram_FileID", IDФайла);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_ОтправитьВидео(Знач Результат, Знач Вариант, Параметры = "", Текст = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["result"]["caption"]).Равно(Текст);
    ОжидаетЧто(Результат["result"]["video"]["mime_type"]).Равно("video/mp4");

    Если Вариант = "Двоичные" Тогда

        IDФайла = Результат["result"]["video"]["file_id"];
        ЗаписатьПараметр("Telegram_FileID", IDФайла);
        Параметры.Вставить("Telegram_FileID", IDФайла);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_ОтправитьАудио(Знач Результат, Знач Вариант, Параметры = "", Текст = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["result"]["caption"]).Равно(Текст);
    ОжидаетЧто(Результат["result"]["audio"]["mime_type"]).Равно("audio/mpeg");

    Если Вариант = "Двоичные" Тогда

        IDФайла = Результат["result"]["audio"]["file_id"];
        ЗаписатьПараметр("Telegram_FileID", IDФайла);
        Параметры.Вставить("Telegram_FileID", IDФайла);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_ОтправитьДокумент(Знач Результат, Знач Вариант, Параметры = "", Текст = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["result"]["caption"]).Равно(Текст);
    ОжидаетЧто(Результат["result"]["document"]).ИмеетТип("Соответствие").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_ОтправитьГифку(Знач Результат, Знач Вариант, Параметры = "", Текст = "")

    Result_ = "result";

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат[Result_]["caption"]).Равно(Текст);
    ОжидаетЧто(Результат[Result_]["document"]).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат[Result_]["animation"]["mime_type"]).Равно("video/mp4");

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_ОтправитьМедиагруппу(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["result"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_ОтправитьМестоположение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["result"]["location"]).ИмеетТип("Соответствие").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_ОтправитьКонтакт(Знач Результат, Знач Вариант, Имя = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["result"]["contact"]).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["result"]["contact"]["first_name"]).Равно(Имя);

    OPI_Инструменты.Пауза(15);

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_ОтправитьОпрос(Знач Результат, Знач Вариант, Вопрос = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["result"]["poll"]).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["result"]["poll"]["question"]).Равно(Вопрос);

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_СкачатьФайл(Знач Результат, Знач Вариант)

    ОжидаетЧто(ТипЗнч(Результат) = Тип("Строка") Или ТипЗнч(Результат) = Тип("ДвоичныеДанные")).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_ПереслатьСообщение(Знач Результат, Знач Вариант, IDСообщения = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["result"]["forward_origin"]["message_id"]).Равно(Число(IDСообщения));

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_Бан(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["description"]).Равно("Bad Request: can't remove chat owner");

    OPI_Инструменты.Пауза(2);

    Возврат Неопределено;

КонецФункции

Функция Проверка_Telegram_Разбан(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["description"]).Равно("Bad Request: can't remove chat owner");

    OPI_Инструменты.Пауза(2);

    Возврат Неопределено;

КонецФункции

Функция Проверка_Telegram_СоздатьСсылкуПриглашение(Знач Результат, Знач Вариант, Заголовок = "", UnixИстечение = "")

    Result_ = "result";
    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат[Result_]["member_limit"]).Равно(200);
    ОжидаетЧто(Результат[Result_]["name"]).Равно(Заголовок);
    ОжидаетЧто(Результат[Result_]["expire_date"]).Равно(Число(UnixИстечение));

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_ЗакрепитьСообщение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_ОткрепитьСообщение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_ПолучитьЧислоУчастников(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["result"]).ИмеетТип("Число");

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_ПолучитьСписокИконокАватаров(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_СоздатьТемуФорума(Знач Результат, Знач Вариант, Параметры = "", ИмяИлиТекст = "", Иконка = "")

    Если Не ЗначениеЗаполнено(Вариант) Тогда

        TTID = "Telegram_TopicID";

        ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
        ОжидаетЧто(Результат["ok"]).Равно(Истина);
        ОжидаетЧто(Результат["result"]["name"]).Равно(ИмяИлиТекст);
        ОжидаетЧто(Результат["result"]["icon_custom_emoji_id"]).Равно(Иконка);

        Тема = Результат["result"]["message_thread_id"];

        OPI_Инструменты.ДобавитьПоле(TTID, Тема, "Строка", Параметры);
        ЗаписатьПараметр(TTID, Параметры[TTID]);

    Иначе

        ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
        ОжидаетЧто(Результат["ok"]).Равно(Истина);
        ОжидаетЧто(Результат["result"]["text"]).Равно(ИмяИлиТекст);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_ИзменитьТемуФорума(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_ЗакрытьТемуФорума(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    OPI_Инструменты.Пауза(10);

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_ОткрытьТемуФорума(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    OPI_Инструменты.Пауза(10);

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_УдалитьТемуФорума(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    OPI_Инструменты.Пауза(10);

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_ОчиститьСписокЗакрепленныхСообщенийТемы(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_СкрытьГлавнуюТемуФорума(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_ПоказатьГлавнуюТемуФорума(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_ИзменитьИмяГлавнойТемыФорума(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_УдалитьСообщение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_ЗаменитьТекстСообщения(Знач Результат, Знач Вариант, Текст = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["result"]["text"]).Равно(Текст);

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_ЗаменитьКлавиатуруСообщения(Знач Результат, Знач Вариант, Клавиатура = "")

    КлавиатураСообщения = Результат["result"]["reply_markup"];

    Клавиатура_ = OPI_Инструменты.JsonВСтруктуру(Клавиатура);
    Клавиатура_.Удалить("rows");
    Клавиатура_ = OPI_Инструменты.JSONСтрокой(Клавиатура_);

    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(СтрДлина(OPI_Инструменты.JSONСтрокой(КлавиатураСообщения))).Равно(СтрДлина(Клавиатура_));

    Возврат Результат;

КонецФункции

Функция Проверка_Telegram_ЗаменитьОписаниеСообщения(Знач Результат, Знач Вариант, Текст = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["result"]["caption"]).Равно(Текст);
    ОжидаетЧто(Результат["result"]["photo"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_VK_СоздатьСсылкуПолученияТокена(Знач Результат, Знач Вариант)

    Если ТипЗнч(Результат) = Тип("ДвоичныеДанные") Тогда
        Результат = ПолучитьСтрокуИзДвоичныхДанных(Результат);
    КонецЕсли;

    ОжидаетЧто(Результат).ИмеетТип("Строка");
    ОжидаетЧто(СтрНачинаетсяС(Результат, "https://oauth.vk.com")).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_СоздатьПост(Знач Результат, Знач Вариант, Параметры = "")

    ИДПоста = Результат["response"]["post_id"];

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(ИДПоста).ИмеетТип("Число").Заполнено();

    Если Вариант = "Путь" Тогда

        OPI_Инструменты.ДобавитьПоле("VK_PostID", ИДПоста, "Строка", Параметры);
        ЗаписатьПараметр("VK_PostID", Параметры["VK_PostID"]);

    КонецЕсли;

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_УдалитьПост(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["response"]).ИмеетТип("Число").Равно(1);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_СоздатьСоставнойПост(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["response"]["post_id"]).ИмеетТип("Число").Заполнено();

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_СоздатьОпрос(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["response"]["post_id"]).ИмеетТип("Число").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_VK_СоздатьАльбом(Знач Результат, Знач Вариант, Параметры = "", Описание = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["response"]["description"]).Равно(Описание);

    ИДАльбома = Результат["response"]["id"];
    Параметры.Вставить("VK_AlbumID", ИДАльбома);
    ЗаписатьПараметр("VK_AlbumID", ИДАльбома);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_СохранитьКартинкуВАльбом(Знач Результат, Знач Вариант, Параметры = "", Описание = "", ИДАльбома = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["response"][0]["text"]).Равно(Описание);
    ОжидаетЧто(Результат["response"][0]["album_id"]).Равно(ИДАльбома);

    ИДКартинки = Результат["response"][0]["id"];
    Параметры.Вставить("VK_PictureID", ИДКартинки);
    ЗаписатьПараметр("VK_PictureID", ИДКартинки);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_УдалитьКартинку(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["response"]).ИмеетТип("Число").Равно(1);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_УдалитьАльбом(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["response"]).ИмеетТип("Число").Равно(1);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_СоздатьИсторию(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["response"]["count"]).ИмеетТип("Число").Равно(1);
    ОжидаетЧто(Результат["response"]["items"]).ИмеетТип("Массив").Заполнено();

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_СоздатьОбсуждение(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["response"]).ИмеетТип("Число").Заполнено();

    ИДОбсуждения = Результат["response"];
    Параметры.Вставить("VK_ConvID", ИДОбсуждения);
    ЗаписатьПараметр("VK_ConvID", ИДОбсуждения);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_ЗакрытьОбсуждение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["response"]).ИмеетТип("Число").Равно(1);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_ОткрытьОбсуждение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["response"]).ИмеетТип("Число").Равно(1);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_НаписатьВОбсуждение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["response"]).ИмеетТип("Число").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_VK_ПоставитьЛайк(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["response"]["likes"]).ИмеетТип("Число").Заполнено();

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_СделатьРепост(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["response"]["success"]).ИмеетТип("Число").Равно(1);
    ОжидаетЧто(Результат["response"]["wall_repost_count"]).ИмеетТип("Число");

    Параметры.Вставить("Repost", Результат["response"]["post_id"]);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_НаписатьКомментарий(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["response"]["comment_id"]).ИмеетТип("Число").Заполнено();

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_ПолучитьСтатистику(Знач Результат, Знач Вариант)

    ТипСоответствие = "Соответствие";

    ОжидаетЧто(Результат).ИмеетТип(ТипСоответствие).Заполнено();
    ОжидаетЧто(Результат["response"][0]["visitors"]).ИмеетТип(ТипСоответствие).Заполнено();
    ОжидаетЧто(Результат["response"][0]["reach"]).ИмеетТип(ТипСоответствие).Заполнено();

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_ПолучитьСтатистикуПостов(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Массив").ИмеетДлину(2);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_СоздатьРекламнуюКампанию(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();

    ИДКампании = Результат["response"][0]["id"];
    ЗаписатьПараметр("VK_AdsCampaignID", ИДКампании);
    Параметры.Вставить("VK_AdsCampaignID", ИДКампании);

    Возврат Неопределено;

КонецФункции

Функция Проверка_VK_СоздатьРекламноеОбъявление(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();

    ИДОбъявления = Результат["response"][0]["id"];
    ЗаписатьПараметр("VK_AdsPostID", ИДОбъявления);
    Параметры.Вставить("VK_AdsPostID", ИДОбъявления);

    Возврат Неопределено;

КонецФункции

Функция Проверка_VK_ПриостановитьРекламноеОбъявление(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();

    Возврат Неопределено;

КонецФункции

Функция Проверка_VK_СформироватьКлавиатуру(Знач Результат, Знач Вариант)

    ТипРезультат = ТипЗнч(Результат);

    ОжидаетЧто(ТипРезультат = Тип("Строка") Или ТипРезультат = Тип("Соответствие")).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_НаписатьСообщение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["response"]).ИмеетТип("Число").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_VK_ПолучитьСписокКатегорийТоваров(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_VK_СоздатьПодборкуТоваров(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["response"]["albums_count"]).ИмеетТип("Число").Заполнено();
    ОжидаетЧто(Результат["response"]["market_album_id"]).ИмеетТип("Число").Заполнено();

    ИДПодборки = Результат["response"]["market_album_id"];
    ЗаписатьПараметр("VK_MarketAlbumID", ИДПодборки);
    Параметры.Вставить("VK_MarketAlbumID", ИДПодборки);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_ИзменитьПодборкуТоваров(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["response"]).ИмеетТип("Число").Равно(1);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_ПолучитьПодборкиПоИД(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["response"]["items"]).ИмеетТип("Массив").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_VK_ДобавитьТовар(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["response"]["market_item_id"]).ИмеетТип("Число").Заполнено();

    ИДТовара = Результат["response"]["market_item_id"];
    ЗаписатьПараметр("VK_MarketItemID", ИДТовара);
    Параметры.Вставить("VK_MarketItemID", ИДТовара);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_ИзменитьТовар(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["response"]).ИмеетТип("Число").Равно(1);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_ДобавитьТоварВПодборку(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["response"]).ИмеетТип("Число").Заполнено();

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_УдалитьТоварИзПодборки(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["response"]).ИмеетТип("Число").Равно(1);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_УдалитьТовар(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["response"]).ИмеетТип("Число").Равно(1);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_УдалитьПодборку(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["response"]).ИмеетТип("Число").Равно(1);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_СоздатьСвойствоТовара(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["response"]["property_id"]).ИмеетТип("Число").Заполнено();

    Свойство = Результат["response"]["property_id"];
    Свойство = OPI_Инструменты.ЧислоВСтроку(Свойство);

    ЗаписатьПараметр("VK_PropID", Свойство);
    Параметры.Вставить("VK_PropID", Свойство);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_ИзменитьСвойствоТовара(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["response"]).ИмеетТип("Число").Равно(1);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_ДобавитьВариантСвойстваТовара(Знач Результат, Знач Вариант, Параметры = "", Счетчик = 0)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["response"]["variant_id"]).ИмеетТип("Число").Заполнено();

    ИДВарианта   = Результат["response"]["variant_id"];
    ИмяПараметра = "VK_PropVarID" + Строка(Счетчик);

    ЗаписатьПараметр(ИмяПараметра, ИДВарианта);
    Параметры.Вставить(ИмяПараметра, ИДВарианта);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_ИзменитьВариантСвойстваТовара(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["response"]).ИмеетТип("Число").Равно(1);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_СоздатьТоварСоСвойством(Знач Результат, Знач Вариант, Параметры = "", Счетчик = 0)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["response"]["market_item_id"]).ИмеетТип("Число").Заполнено();

    ИДТовара = Результат["response"]["market_item_id"];
    ИмяПоля  = "VK_MarketItemID" + Строка(Счетчик);

    ЗаписатьПараметр(ИмяПоля, ИДТовара);
    Параметры.Вставить(ИмяПоля, ИДТовара);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_ПолучитьТоварыПоИД(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["response"]["items"]).ИмеетТип("Массив").ИмеетДлину(2);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_СгруппироватьТовары(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["response"]["item_group_id"]).ИмеетТип("Число").Заполнено();

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_УдалитьВариантСвойстваТовара(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["response"]).ИмеетТип("Число").Равно(1);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_УдалитьСвойствоТовара(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["response"]).ИмеетТип("Число").Равно(1);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_ПолучитьСписокТоваров(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Массив");

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_ПолучитьСписокПодборок(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Массив");

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_ПолучитьСписокСвойств(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Массив");

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_ПолучитьСписокЗаказов(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Массив");

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_ЗагрузитьВидеоНаСервер(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["video_id"]).Заполнено();
    ОжидаетЧто(Результат["video_hash"]).Заполнено();

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_VK_ЗагрузитьФотоНаСервер(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["response"][0]["text"]).Равно("");

    Возврат Результат;

КонецФункции

Функция Проверка_VK_СократитьСсылку(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Строка").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_VK_ПолучитьСписокРекламныхКатегорий(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["response"]["v2"]).ИмеетТип("Массив").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_VK_ПолучитьОписаниеТовара(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_VK_ПолучитьПараметрыАвторизации(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["v"]).Заполнено();
    ОжидаетЧто(Результат["from_group"]).Заполнено();
    ОжидаетЧто(Результат["group_id"]).Заполнено();
    ОжидаетЧто(Результат["owner_id"]).Заполнено();
    ОжидаетЧто(Результат["app_id"]).Заполнено();
    ОжидаетЧто(Результат["access_token"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_YandexDisk_ПолучитьИнформациюОДиске(Знач Результат, Знач Вариант)

    Соответствие_ = "Соответствие";

    ОжидаетЧто(Результат).ИмеетТип(Соответствие_).Заполнено();
    ОжидаетЧто(Результат["system_folders"]).ИмеетТип(Соответствие_);
    ОжидаетЧто(Результат["user"]).ИмеетТип(Соответствие_);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_YandexDisk_СоздатьПапку(Знач Результат, Знач Вариант, Токен = "", Путь = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["type"]).Равно("dir");
    ОжидаетЧто(Результат["path"]).Равно("disk:" + Путь);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_YandexDisk_ЗагрузитьФайлПоURL(Знач Результат, Знач Вариант, Параметры = "", Путь = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["href"]).Заполнено();
    ОжидаетЧто(Результат["method"]).Заполнено();

    ЗаписатьПараметр("YandexDisk_FileByURLPath", Путь);
    Параметры.Вставить("YandexDisk_FileByURLPath", Путь);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_YandexDisk_ПолучитьОбъект(Знач Результат, Знач Вариант, Путь = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["type"]).Равно("file");
    ОжидаетЧто(Результат["path"]).Равно("disk:" + Путь);

    Возврат Результат;

КонецФункции

Функция Проверка_YandexDisk_УдалитьОбъект(Знач Результат, Знач Вариант)

    Если Не нРег(Строка(Результат)) = "null" Тогда
        ОжидаетЧто(ЗначениеЗаполнено(Результат)).Равно(Ложь);
    КонецЕсли;

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_YandexDisk_ЗагрузитьФайл(Знач Результат, Знач Вариант)

    Если Не нРег(Строка(Результат)) = "null" Тогда
        ОжидаетЧто(ЗначениеЗаполнено(Результат)).Равно(Ложь);
    КонецЕсли;

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_YandexDisk_ЗагрузитьФайлЧастями(Знач Результат, Знач Вариант, Файл = "")

    Если Вариант = "Скачивание" Тогда

        OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);

        ОжидаетЧто(Результат).ИмеетТип("ДвоичныеДанные").Заполнено();
        ОжидаетЧто(Результат.Размер()).Равно(Файл.Размер());

        ХешОригинал = ПолучитьСтрокуИзДвоичныхДанных(OPI_Криптография.Хеш(Файл, "SHA256"));
        ХешПроверки = ПолучитьСтрокуИзДвоичныхДанных(OPI_Криптография.Хеш(Результат, "SHA256"));

        ОжидаетЧто(ХешПроверки).Равно(ХешОригинал);

    ИначеЕсли Вариант = "Удаление" Тогда

        Если Не нРег(Строка(Результат)) = "null" Тогда
            ОжидаетЧто(ЗначениеЗаполнено(Результат)).Равно(Ложь);
        КонецЕсли;

    Иначе
        ОжидаетЧто(Результат["status"] >= 200 И Результат["status"] < 300).Равно(Истина);
    КонецЕсли;

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_YandexDisk_СоздатьКопиюОбъекта(Знач Результат, Знач Вариант, Параметры = "", Путь = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["type"]).Равно("file");
    ОжидаетЧто(Результат["path"]).Равно("disk:" + Путь);

    ЗаписатьПараметр("YandexDisk_CopyFilePath", Путь);
    Параметры.Вставить("YandexDisk_CopyFilePath", Путь);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_YandexDisk_ПолучитьСсылкуДляСкачивания(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["method"]).Равно("GET");
    ОжидаетЧто(Результат["href"]).ИмеетТип("Строка").Заполнено();

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_YandexDisk_СкачатьФайл(Знач Результат, Знач Вариант)

    МинимальныйРазмер = 1000;

    ОжидаетЧто(Результат).ИмеетТип("ДвоичныеДанные");
    ОжидаетЧто(Результат.Размер() > МинимальныйРазмер).Равно(Истина);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_YandexDisk_ПолучитьСписокФайлов(Знач Результат, Знач Вариант, Количество = 0, Отступ = 0)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["limit"]).Равно(Количество);
    ОжидаетЧто(Результат["offset"]).Равно(Отступ);
    ОжидаетЧто(Результат["items"]).ИмеетТип("Массив");

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_YandexDisk_ПереместитьОбъект(Знач Результат, Знач Вариант, Параметры = "", Путь = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["type"]).Равно("file");
    ОжидаетЧто(Результат["path"]).Равно("disk:" + Путь);

    ЗаписатьПараметр("YandexDisk_NewFilePath", Путь);
    Параметры.Вставить("YandexDisk_NewFilePath", Путь);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_YandexDisk_ПолучитьСписокОпубликованныхОбъектов(Знач Результат, Знач Вариант, Количество = 0,
    Отступ = 0)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["limit"]).Равно(Количество);
    ОжидаетЧто(Результат["offset"]).Равно(Отступ);
    ОжидаетЧто(Результат["items"]).ИмеетТип("Массив");

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_YandexDisk_ОпубликоватьОбъект(Знач Результат, Знач Вариант, Параметры = "", Путь = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["type"]).Равно("file");
    ОжидаетЧто(Результат["path"]).Равно("disk:" + Путь);
    ОжидаетЧто(Результат["public_url"]).ИмеетТип("Строка").Заполнено();

    URL = Результат["public_url"];
    ЗаписатьПараметр("YandexDisk_PublicURL", URL);
    Параметры.Вставить("YandexDisk_PublicURL", URL);

    Возврат Результат;

КонецФункции

Функция Проверка_YandexDisk_ПолучитьСсылкуСкачиванияПубличногоОбъекта(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["method"]).Равно("GET");
    ОжидаетЧто(Результат["href"]).ИмеетТип("Строка").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_YandexDisk_ПолучитьПубличныйОбъект(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["type"]).Равно("file");
    ОжидаетЧто(Результат["path"]).Заполнено();
    ОжидаетЧто(Результат["public_url"]).ИмеетТип("Строка").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_YandexDisk_СохранитьПубличныйОбъектНаДиск(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["type"]).Равно("file");
    ОжидаетЧто(Результат["path"]).Заполнено();
    ОжидаетЧто(Результат["public_url"]).ИмеетТип("Неопределено");

    Возврат Результат;

КонецФункции

Функция Проверка_YandexDisk_ОтменитьПубликациюОбъекта(Знач Результат, Знач Вариант, Путь = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["type"]).Равно("file");
    ОжидаетЧто(Результат["path"]).Равно("disk:" + Путь);
    ОжидаетЧто(Результат["public_url"]).ИмеетТип("Неопределено");

    Возврат Результат;

КонецФункции

Функция Проверка_YandexDisk_ПолучитьКодПодтверждения(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["verification_url"]).Заполнено();
    ОжидаетЧто(Результат["device_code"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_YandexDisk_ПреобразоватьКодВТокен(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();

    Если Результат.Получить("access_token") <> Неопределено Тогда

        Токен = Результат["access_token"];
        ЗаписатьПараметр("YandexDisk_Token", Токен);
        Параметры.Вставить("YandexDisk_Token", Токен);

        Токен = Результат["refresh_token"];
        ЗаписатьПараметр("YandexDisk_RefreshToken", Токен);
        Параметры.Вставить("YandexDisk_RefreshToken", Токен);

    КонецЕсли;

    Возврат Неопределено;

КонецФункции

Функция Проверка_YandexDisk_ОбновитьТокен(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["access_token"]).Заполнено();
    ОжидаетЧто(Результат["refresh_token"]).Заполнено();

    Токен = Результат["access_token"];
    ЗаписатьПараметр("YandexDisk_Token", Токен);
    Параметры.Вставить("YandexDisk_Token", Токен);

    Токен = Результат["refresh_token"];
    ЗаписатьПараметр("YandexDisk_RefreshToken", Токен);
    Параметры.Вставить("YandexDisk_RefreshToken", Токен);

    Возврат Неопределено;

КонецФункции

Функция Проверка_Viber_УстановитьWebhook(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Viber_ПолучитьИнформациюОКанале(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["status_message"]).Равно("ok");
    ОжидаетЧто(Результат["status"]).Равно(0);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Viber_ПолучитьДанныеПользователя(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["chat_hostname"]).Заполнено();
    ОжидаетЧто(Результат["status_message"]).Заполнено();

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Viber_ПолучитьОнлайнПользователей(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["status_message"]).Равно("ok");
    ОжидаетЧто(Результат["status"]).Равно(0);
    ОжидаетЧто(Результат["users"]).ИмеетТип("Массив");

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Viber_СформироватьКлавиатуруИзМассиваКнопок(Знач Результат, Знач Вариант)

    Возврат Результат;

КонецФункции

Функция Проверка_Viber_ОтправитьТекстовоеСообщение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["message_token"]).Заполнено();
    ОжидаетЧто(Результат["status_message"]).Равно("ok");
    ОжидаетЧто(Результат["status"]).Равно(0);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Viber_ОтправитьКартинку(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["message_token"]).Заполнено();
    ОжидаетЧто(Результат["status_message"]).Равно("ok");
    ОжидаетЧто(Результат["status"]).Равно(0);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Viber_ОтправитьФайл(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["message_token"]).Заполнено();
    ОжидаетЧто(Результат["status_message"]).Равно("ok");
    ОжидаетЧто(Результат["status"]).Равно(0);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Viber_ОтправитьКонтакт(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["message_token"]).Заполнено();
    ОжидаетЧто(Результат["status_message"]).Равно("ok");
    ОжидаетЧто(Результат["status"]).Равно(0);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Viber_ОтправитьЛокацию(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["message_token"]).Заполнено();
    ОжидаетЧто(Результат["status_message"]).Равно("ok");
    ОжидаетЧто(Результат["status"]).Равно(0);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Viber_ОтправитьСсылку(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["message_token"]).Заполнено();
    ОжидаетЧто(Результат["status_message"]).Равно("ok");
    ОжидаетЧто(Результат["status"]).Равно(0);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleWorkspace_СформироватьСсылкуПолученияКода(Знач Результат, Знач Вариант)

    Если ТипЗнч(Результат) = Тип("ДвоичныеДанные") Тогда
        Результат = ПолучитьСтрокуИзДвоичныхДанных(Результат);
    КонецЕсли;

    ОжидаетЧто(Результат).ИмеетТип("Строка");
    ОжидаетЧто(СтрНачинаетсяС(Результат, "https://accounts.google.com/o/oauth2")).Равно(Истина);

    ЗаписатьПараметр("Google_Link", Результат);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleWorkspace_ПолучитьТокенПоКоду(Знач Результат, Знач Вариант)

    Если ЗначениеЗаполнено(Результат["access_token"]) И ЗначениеЗаполнено(Результат["refresh_token"]) Тогда

        ЗаписатьПараметр("Google_Token"  , Результат["access_token"]);
        ЗаписатьПараметр("Google_Refresh", Результат["refresh_token"]);

    КонецЕсли;

    OPI_Инструменты.Пауза(2);

    Возврат Неопределено;

КонецФункции

Функция Проверка_GoogleWorkspace_ОбновитьТокен(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["access_token"]).Заполнено();
    ЗаписатьПараметр("Google_Token", Результат["access_token"]);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleWorkspace_ПолучитьТокенServiceАккаунта(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["access_token"]).Заполнено();
    ЗаписатьПараметр("Google_ServiceToken", Результат["access_token"]);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleCalendar_СформироватьСсылкуПолученияКода(Знач Результат, Знач Вариант)

    Если ТипЗнч(Результат) = Тип("ДвоичныеДанные") Тогда
        Результат = ПолучитьСтрокуИзДвоичныхДанных(Результат);
    КонецЕсли;

    ОжидаетЧто(Результат).ИмеетТип("Строка");
    ОжидаетЧто(СтрНачинаетсяС(Результат, "https://accounts.google.com/o/oauth2")).Равно(Истина);

    ЗаписатьПараметр("Google_Link", Результат);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleCalendar_ПолучитьТокенПоКоду(Знач Результат, Знач Вариант)

    Если ЗначениеЗаполнено(Результат["access_token"]) И ЗначениеЗаполнено(Результат["refresh_token"]) Тогда

        ЗаписатьПараметр("Google_Token"  , Результат["access_token"]);
        ЗаписатьПараметр("Google_Refresh", Результат["refresh_token"]);

    КонецЕсли;

    OPI_Инструменты.Пауза(2);

    Возврат Неопределено;

КонецФункции

Функция Проверка_GoogleCalendar_ОбновитьТокен(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["access_token"]).Заполнено();
    ЗаписатьПараметр("Google_Token", Результат["access_token"]);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleCalendar_ПолучитьТокенServiceАккаунта(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["access_token"]).Заполнено();
    ЗаписатьПараметр("Google_ServiceToken", Результат["access_token"]);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleCalendar_ПолучитьСписокКалендарей(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Массив");

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleCalendar_СоздатьКалендарь(Знач Результат, Знач Вариант, Параметры = "", Наименование = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["summary"]).Равно(Наименование);
    ОжидаетЧто(Результат["id"]).ИмеетТип("Строка").Заполнено();

    Календарь = Результат["id"];
    ЗаписатьПараметр("Google_NewCalendarID", Календарь);
    OPI_Инструменты.ДобавитьПоле("Google_NewCalendarID", Календарь, "Строка", Параметры);

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleCalendar_ИзменитьМетаданныеКалендаря(Знач Результат, Знач Вариант, Наименование = "",
    Описание = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["summary"]).Равно(Наименование);
    ОжидаетЧто(Результат["description"]).Равно(Описание);
    ОжидаетЧто(Результат["id"]).ИмеетТип("Строка").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleCalendar_ПолучитьМетаданныеКалендаря(Знач Результат, Знач Вариант, Наименование = "",
    Описание = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["summary"]).Равно(Наименование);
    ОжидаетЧто(Результат["description"]).Равно(Описание);
    ОжидаетЧто(Результат["id"]).ИмеетТип("Строка").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleCalendar_ДобавитьКалендарьВСписок(Знач Результат, Знач Вариант, Наименование = "", Описание = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["summary"]).Равно(Наименование);
    ОжидаетЧто(Результат["description"]).Равно(Описание);
    ОжидаетЧто(Результат["id"]).ИмеетТип("Строка").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleCalendar_ИзменитьКалендарьСписка(Знач Результат, Знач Вариант, ОсновнойЦвет = "",
    ДополнительныйЦвет = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["foregroundColor"]).Равно(ОсновнойЦвет);
    ОжидаетЧто(Результат["backgroundColor"]).Равно(ДополнительныйЦвет);

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleCalendar_ПолучитьКалендарьСписка(Знач Результат, Знач Вариант, ОсновнойЦвет = "",
    ДополнительныйЦвет = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["foregroundColor"]).Равно(ОсновнойЦвет);
    ОжидаетЧто(Результат["backgroundColor"]).Равно(ДополнительныйЦвет);

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleCalendar_ОчиститьОсновнойКалендарь(Знач Результат, Знач Вариант)

    Если Не нРег(Строка(Результат)) = "null" Тогда
        ОжидаетЧто(ЗначениеЗаполнено(Результат)).Равно(Ложь);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleCalendar_УдалитьКалендарьИзСписка(Знач Результат, Знач Вариант)

    Если Не нРег(Строка(Результат)) = "null" Тогда

        Если ЗначениеЗаполнено(Результат) Тогда
            ОжидаетЧто(Результат["error"]["message"])
                .Равно("Data owner of a calendar cannot remove calendar list entry for that calendar.");
        КонецЕсли;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleCalendar_УдалитьКалендарь(Знач Результат, Знач Вариант)

    Если Не нРег(Строка(Результат)) = "null" Тогда
        ОжидаетЧто(ЗначениеЗаполнено(Результат)).Равно(Ложь);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleCalendar_СоздатьСобытие(Знач Результат, Знач Вариант, Параметры = "", Наименование = "",
    Описание = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["summary"]).Равно(Наименование);
    ОжидаетЧто(Результат["description"]).Равно(Описание);
    ОжидаетЧто(Результат["id"]).ИмеетТип("Строка").Заполнено();

    Событие = Результат["id"];
    ЗаписатьПараметр("Google_EventID", Событие);
    OPI_Инструменты.ДобавитьПоле("Google_EventID", Событие, "Строка", Параметры);

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleCalendar_ИзменитьСобытие(Знач Результат, Знач Вариант, Наименование = "", Описание = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["summary"]).Равно(Наименование);
    ОжидаетЧто(Результат["description"]).Равно(Описание);
    ОжидаетЧто(Результат["id"]).ИмеетТип("Строка").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleCalendar_ПолучитьСобытие(Знач Результат, Знач Вариант, Наименование = "", Описание = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["summary"]).Равно(Наименование);
    ОжидаетЧто(Результат["description"]).Равно(Описание);
    ОжидаетЧто(Результат["id"]).ИмеетТип("Строка").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleCalendar_ПереместитьСобытие(Знач Результат, Знач Вариант, Наименование = "", Описание = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["summary"]).Равно(Наименование);
    ОжидаетЧто(Результат["description"]).Равно(Описание);
    ОжидаетЧто(Результат["id"]).ИмеетТип("Строка").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleCalendar_УдалитьСобытие(Знач Результат, Знач Вариант)

    Если Не нРег(Строка(Результат)) = "null" Тогда
        ОжидаетЧто(ЗначениеЗаполнено(Результат)).Равно(Ложь);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleCalendar_ПолучитьСписокСобытий(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleCalendar_ПолучитьОписаниеСобытия(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleDrive_СформироватьСсылкуПолученияКода(Знач Результат, Знач Вариант)

    Если ТипЗнч(Результат) = Тип("ДвоичныеДанные") Тогда
        Результат = ПолучитьСтрокуИзДвоичныхДанных(Результат);
    КонецЕсли;

    ОжидаетЧто(Результат).ИмеетТип("Строка");
    ОжидаетЧто(СтрНачинаетсяС(Результат, "https://accounts.google.com/o/oauth2")).Равно(Истина);

    ЗаписатьПараметр("Google_Link", Результат);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleDrive_ПолучитьТокенПоКоду(Знач Результат, Знач Вариант)

    Если ЗначениеЗаполнено(Результат["access_token"]) И ЗначениеЗаполнено(Результат["refresh_token"]) Тогда

        ЗаписатьПараметр("Google_Token"  , Результат["access_token"]);
        ЗаписатьПараметр("Google_Refresh", Результат["refresh_token"]);

    КонецЕсли;

    OPI_Инструменты.Пауза(2);

    Возврат Неопределено;

КонецФункции

Функция Проверка_GoogleDrive_ОбновитьТокен(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["access_token"]).Заполнено();
    ЗаписатьПараметр("Google_Token", Результат["access_token"]);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleDrive_ПолучитьТокенServiceАккаунта(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["access_token"]).Заполнено();
    ЗаписатьПараметр("Google_ServiceToken", Результат["access_token"]);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleDrive_ПолучитьСписокКаталогов(Знач Результат, Знач Вариант, Параметры = "")

    Результат = Результат[0];

    ОжидаетЧто(Результат["mimeType"]).Равно("application/vnd.google-apps.folder");
    ОжидаетЧто(Результат["name"]).Заполнено();

    Идентификатор = Результат["id"];
    ЗаписатьПараметр("GD_Catalog", Идентификатор);
    OPI_Инструменты.ДобавитьПоле("GD_Catalog", Идентификатор, "Строка", Параметры);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleDrive_ПолучитьИнформациюОбОбъекте(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["mimeType"]).Равно("application/vnd.google-apps.folder");
    ОжидаетЧто(Результат["name"]).Заполнено();

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleDrive_ЗагрузитьФайл(Знач Результат, Знач Вариант, Параметры = "", Описание = "")

    Если Не ЗначениеЗаполнено(Вариант) Тогда

        ОжидаетЧто(Результат["mimeType"]).Равно(Описание["MIME"]);
        ОжидаетЧто(Результат["name"]).Равно(Описание["Имя"]);

        Идентификатор = Результат["id"];

        ЗаписатьПараметр("GD_File", Идентификатор);
        OPI_Инструменты.ДобавитьПоле("GD_File", Идентификатор, "Строка", Параметры);

    ИначеЕсли Вариант = "Проверка" Тогда

        Файл = Параметры["Big"];

        OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);

        ОжидаетЧто(Результат).ИмеетТип("ДвоичныеДанные").Заполнено();
        ОжидаетЧто(Результат.Размер()).Равно(Файл.Размер());

        ХешОригинал = ПолучитьСтрокуИзДвоичныхДанных(OPI_Криптография.Хеш(Файл, "SHA256"));
        ХешПроверки = ПолучитьСтрокуИзДвоичныхДанных(OPI_Криптография.Хеш(Результат, "SHA256"));

        ОжидаетЧто(ХешПроверки).Равно(ХешОригинал);

    Иначе

        ОжидаетЧто(Результат["mimeType"]).Равно(Описание["MIME"]);
        ОжидаетЧто(Результат["name"]).Равно(Описание["Имя"]);

        Идентификатор = Результат["id"];

        МассивУдаляемых = Параметры["МассивУдаляемых"];
        МассивУдаляемых.Добавить(Идентификатор);
        Параметры.Вставить("МассивУдаляемых", МассивУдаляемых);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleDrive_СкопироватьОбъект(Знач Результат, Знач Вариант, Параметры = "", НовоеИмя = "")

    Описание = Новый Структура("Имя,MIME", НовоеИмя, "image/jpeg");

    ОжидаетЧто(Результат["mimeType"]).Равно(Описание["MIME"]);
    ОжидаетЧто(Результат["name"]).Равно(Описание["Имя"]);

    Идентификатор = Результат["id"];

    МассивУдаляемых = Параметры["МассивУдаляемых"];
    МассивУдаляемых.Добавить(Идентификатор);
    Параметры.Вставить("МассивУдаляемых", МассивУдаляемых);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleDrive_СкачатьФайл(Знач Результат, Знач Вариант, Параметры = "")

    Размер = OPI_ЗапросыHTTP.Get(Параметры["Picture"]).Размер();

    ОжидаетЧто(Результат).ИмеетТип("ДвоичныеДанные");
    ОжидаетЧто(Результат.Размер() >= Размер).Равно(Истина);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleDrive_ОбновитьФайл(Знач Результат, Знач Вариант, НовоеИмя = "")

    Описание = Новый Структура("Имя,MIME", НовоеИмя, "image/jpeg");

    ОжидаетЧто(Результат["mimeType"]).Равно(Описание["MIME"]);
    ОжидаетЧто(Результат["name"]).Равно(Описание["Имя"]);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleDrive_ПолучитьСписокФайлов(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleDrive_УдалитьОбъект(Знач Результат, Знач Вариант)

    Если Не нРег(Строка(Результат)) = "null" Тогда
        ОжидаетЧто(ЗначениеЗаполнено(Результат)).Равно(Ложь);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleDrive_ПолучитьОписаниеФайла(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleDrive_СоздатьКомментарий(Знач Результат, Знач Вариант, Параметры = "", Комментарий = "")

    ОжидаетЧто(Результат["content"]).Равно(Комментарий);
    ОжидаетЧто(Результат["kind"]).Равно("drive#comment");

    Идентификатор = Результат["id"];

    ЗаписатьПараметр("GD_Comment", Идентификатор);
    OPI_Инструменты.ДобавитьПоле("GD_Comment", Идентификатор, "Строка", Параметры);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleDrive_ПолучитьКомментарий(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["content"]).Равно("Текст комментария");
    ОжидаетЧто(Результат["kind"]).Равно("drive#comment");

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleDrive_ПолучитьСписокКомментариев(Знач Результат, Знач Вариант)

    Комментарии       = Результат["comments"];
    ОбъектКомментарий = Комментарии[Комментарии.ВГраница()];

    ОжидаетЧто(ОбъектКомментарий["content"]).Равно("Текст комментария");
    ОжидаетЧто(ОбъектКомментарий["kind"]).Равно("drive#comment");

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleDrive_УдалитьКомментарий(Знач Результат, Знач Вариант)

    Если Не нРег(Строка(Результат)) = "null" Тогда
        ОжидаетЧто(ЗначениеЗаполнено(Результат)).Равно(Ложь);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleDrive_СоздатьПапку(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["mimeType"]).Равно("application/vnd.google-apps.folder");
    ОжидаетЧто(Результат["name"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleSheets_СформироватьСсылкуПолученияКода(Знач Результат, Знач Вариант)

    Если ТипЗнч(Результат) = Тип("ДвоичныеДанные") Тогда
        Результат = ПолучитьСтрокуИзДвоичныхДанных(Результат);
    КонецЕсли;

    ОжидаетЧто(Результат).ИмеетТип("Строка");
    ОжидаетЧто(СтрНачинаетсяС(Результат, "https://accounts.google.com/o/oauth2")).Равно(Истина);

    ЗаписатьПараметр("Google_Link", Результат);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleSheets_ПолучитьТокенПоКоду(Знач Результат, Знач Вариант)

    Если ЗначениеЗаполнено(Результат["access_token"]) И ЗначениеЗаполнено(Результат["refresh_token"]) Тогда

        ЗаписатьПараметр("Google_Token"  , Результат["access_token"]);
        ЗаписатьПараметр("Google_Refresh", Результат["refresh_token"]);

    КонецЕсли;

    OPI_Инструменты.Пауза(2);

    Возврат Неопределено;

КонецФункции

Функция Проверка_GoogleSheets_ОбновитьТокен(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["access_token"]).Заполнено();
    ЗаписатьПараметр("Google_Token", Результат["access_token"]);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleSheets_ПолучитьТокенServiceАккаунта(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["access_token"]).Заполнено();
    ЗаписатьПараметр("Google_ServiceToken", Результат["access_token"]);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleSheets_СоздатьКнигу(Знач Результат, Знач Вариант, Параметры = "", Наименование = "",
    МассивЛистов = "")

    ОжидаетЧто(Результат["properties"]["title"]).Равно(Наименование);

    Если ЗначениеЗаполнено(МассивЛистов) Тогда

        Для Н = 0 По МассивЛистов.ВГраница() Цикл

            ИмяЛиста = Результат["sheets"][Н]["properties"]["title"];
            ОжидаетЧто(ИмяЛиста).Равно(МассивЛистов[Н]);

        КонецЦикла;

    КонецЕсли;

    Книга = Результат["spreadsheetId"];

    Если Не ЗначениеЗаполнено(Вариант) Тогда

        Лист = Результат["sheets"][0]["properties"]["sheetId"];
        Лист = OPI_Инструменты.ЧислоВСтроку(Лист);

        ЗаписатьПараметр("GS_Spreadsheet", Книга);
        ЗаписатьПараметр("GS_Sheet"      , Лист);

        OPI_Инструменты.ДобавитьПоле("GS_Spreadsheet", Книга, "Строка", Параметры);
        OPI_Инструменты.ДобавитьПоле("GS_Sheet"      , Лист , "Строка", Параметры);

    Иначе

        ЗаписатьПараметр("GS_Spreadsheet2", Книга);
        OPI_Инструменты.ДобавитьПоле("GS_Spreadsheet2", Книга, "Строка", Параметры);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleSheets_ПолучитьКнигу(Знач Результат, Знач Вариант, Токен = "")

    Наименование = "Тестовая таблица";

    МассивЛистов = Новый Массив;
    МассивЛистов.Добавить("Лист1");
    МассивЛистов.Добавить("Лист2");

    ОжидаетЧто(Результат["properties"]["title"]).Равно(Наименование);

    Для Н = 0 По МассивЛистов.ВГраница() Цикл

        ИмяЛиста = Результат["sheets"][Н]["properties"]["title"];
        ОжидаетЧто(ИмяЛиста).Равно(МассивЛистов[Н]);

    КонецЦикла;

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleSheets_КопироватьЛист(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["title"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleSheets_ДобавитьЛист(Знач Результат, Знач Вариант)

    НовыйЛист = Результат["replies"][0]["addSheet"]["properties"];
    ОжидаетЧто(НовыйЛист["title"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleSheets_УдалитьЛист(Знач Результат, Знач Вариант, Книга = "")

    ОжидаетЧто(Результат["spreadsheetId"]).Равно(Книга);

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleSheets_ИзменитьНаименованиеКниги(Знач Результат, Знач Вариант, Книга = "")

    ОжидаетЧто(Результат["spreadsheetId"]).Равно(Книга);

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleSheets_ПолучитьТаблицу(Знач Результат, Знач Вариант)

    Наименование = "Тестовая таблица (изм.)";
    ОжидаетЧто(Результат["properties"]["title"]).Равно(Наименование);

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleSheets_УстановитьЗначенияЯчеек(Знач Результат, Знач Вариант, Количество = 0)

    ОжидаетЧто(Результат["totalUpdatedCells"]).Равно(Количество);

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleSheets_ПолучитьЗначенияЯчеек(Знач Результат, Знач Вариант, КнигаИлиКоличество = 0)

    Если Вариант = "Все" Тогда
        ОжидаетЧто(Результат["spreadsheetId"]).Равно(КнигаИлиКоличество);
    Иначе
        ОжидаетЧто(Результат["valueRanges"].Количество()).Равно(КнигаИлиКоличество);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GoogleSheets_ОчиститьЯчейки(Знач Результат, Знач Вариант, Количество = 0)

    ОжидаетЧто(Результат["clearedRanges"].Количество()).Равно(Количество);

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_ПолучитьИнформациюОБоте(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["bot_id"]).Заполнено();
    ОжидаетЧто(Результат["user_id"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_ПолучитьСписокПользователей(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["members"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_ПолучитьСписокРабочихОбластей(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["teams"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_ОтправитьСообщение(Знач Результат, Знач Вариант, Параметры = "", Текст = "", Канал = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["channel"]).Равно(Канал);
    ОжидаетЧто(Результат["message"]["text"]).Равно(Текст);

    Если Не ЗначениеЗаполнено(Вариант) Тогда

        Отметка = Результат["ts"];
        ЗаписатьПараметр("Slack_MessageTS", Отметка);
        OPI_Инструменты.ДобавитьПоле("Slack_MessageTS", Отметка, "Строка", Параметры);

    КонецЕсли;

    Если Не Вариант = "Отложенное" Тогда

        ОжидаетЧто(Результат["ts"]).Заполнено();

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_СформироватьБлокКартинку(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_ИзменитьСообщение(Знач Результат, Знач Вариант, Текст = "", Канал = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["channel"]).Равно(Канал);
    ОжидаетЧто(Результат["ts"]).Заполнено();
    ОжидаетЧто(Результат["message"]["text"]).Равно(Текст);

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_ПолучитьСписокОтветовНаСообщение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["messages"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_ПолучитьСсылкуНаСообщение(Знач Результат, Знач Вариант, Канал = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["channel"]).Равно(Канал);
    ОжидаетЧто(Результат["permalink"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_УдалитьСообщение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_ОтправитьЭфемерноеСообщение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["message_ts"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_ПолучитьСписокОтложенныхСообщений(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["scheduled_messages"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_СоздатьКанал(Знач Результат, Знач Вариант, Параметры = "", Имя = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Данные = Результат["channel"];
    ОжидаетЧто(Данные["name"]).Равно(Имя);

    Канал = Результат["channel"]["id"];
    ЗаписатьПараметр("Slack_NewChannel", Канал);
    OPI_Инструменты.ДобавитьПоле("Slack_NewChannel", Канал, "Строка", Параметры);

    ЗаписатьПараметр("Slack_NewChannelName", Имя);
    OPI_Инструменты.ДобавитьПоле("Slack_NewChannelName", Имя, "Строка", Параметры);

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_УстановитьТемуКанала(Знач Результат, Знач Вариант, Тема = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Данные = Результат["channel"];
    ОжидаетЧто(Данные["topic"]["value"]).Равно(Тема);

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_УстановитьЦельКанала(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_ПолучитьКанал(Знач Результат, Знач Вариант, Имя = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Данные = Результат["channel"];
    ОжидаетЧто(Данные["name"]).Равно(Имя);

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_ПригласитьПользователейВКанал(Знач Результат, Знач Вариант, Имя = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Данные = Результат["channel"];
    ОжидаетЧто(Данные["name"]).Равно(Имя);

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_ВыгнатьПользователяИзКанала(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_ПолучитьИсториюКанала(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["messages"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_ПолучитьСписокПользователейКанала(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["members"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_ПокинутьКанал(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_ВступитьВКанал(Знач Результат, Знач Вариант, Имя = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Данные = Результат["channel"];
    ОжидаетЧто(Данные["name"]).Равно(Имя);

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_ПереименоватьКанал(Знач Результат, Знач Вариант, Имя = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Данные = Результат["channel"];
    ОжидаетЧто(Данные["name"]).Равно(Имя);

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_АрхивироватьКанал(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_ПолучитьСписокКаналов(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["channels"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_ОткрытьДиалог(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Если Не ЗначениеЗаполнено(Вариант) Тогда

        Диалог = Результат["channel"]["id"];

        ОжидаетЧто(Результат["channel"]).ИмеетТип("Соответствие");
        ОжидаетЧто(Диалог).Заполнено();

        ЗаписатьПараметр("Slack_Dialog", Диалог);
        OPI_Инструменты.ДобавитьПоле("Slack_Dialog", Диалог, "Строка", Параметры);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_ЗакрытьДиалог(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_ПолучитьСписокФайлов(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["files"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_ЗагрузитьФайл(Знач Результат, Знач Вариант, Параметры = "", ИмяФайла = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Если ЗначениеЗаполнено(Результат["files"]) Тогда
        ЗагруженныйФайл = Результат["files"][0];
    Иначе
        ЗагруженныйФайл = Результат["file"];
    КонецЕсли;

    ОжидаетЧто(ЗагруженныйФайл["name"]).Равно(ИмяФайла);

    Если Не ЗначениеЗаполнено(Вариант) Тогда

        ЗагруженныйФайл = Результат["files"][0]["id"];
        ЗаписатьПараметр("Slack_FileID", ЗагруженныйФайл);
        OPI_Инструменты.ДобавитьПоле("Slack_FileID", ЗагруженныйФайл, "Строка", Параметры);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_СделатьФайлПубличным(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();

    Возврат Неопределено;

КонецФункции

Функция Проверка_Slack_СделатьФайлПриватным(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();

    Возврат Неопределено;

КонецФункции

Функция Проверка_Slack_ПолучитьДанныеФайла(Знач Результат, Знач Вариант, ИмяФайла = "")

    Если ЗначениеЗаполнено(Результат["files"]) Тогда
        ЗагруженныйФайл = Результат["files"][0];
    Иначе
        ЗагруженныйФайл = Результат["file"];
    КонецЕсли;

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(ЗагруженныйФайл["name"]).Равно(ИмяФайла);

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_УдалитьФайл(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_ПолучитьСписокВнешнихФайлов(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["files"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_ДобавитьВнешнийФайл(Знач Результат, Знач Вариант, Параметры = "", Заголовок = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    ЗагруженныйФайл = Результат["file"];
    ОжидаетЧто(ЗагруженныйФайл["title"]).Равно(Заголовок);

    ЗагруженныйФайл = Результат["file"]["id"];
    ЗаписатьПараметр("Slack_ExtFileID", ЗагруженныйФайл);
    OPI_Инструменты.ДобавитьПоле("Slack_ExtFileID", ЗагруженныйФайл, "Строка", Параметры);

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_ПолучитьВнешнийФайл(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    ЗагруженныйФайл = Результат["file"];
    ОжидаетЧто(ЗагруженныйФайл["title"]).Равно("Новый файл");

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_ОтправитьВнешнийФайл(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Slack_УдалитьВнешнийФайл(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Airtable_СоздатьБазу(Знач Результат, Знач Вариант, Параметры = "", ИмяТаблицы = "")

    ОжидаетЧто(Результат["id"]).Заполнено();
    ОжидаетЧто(Результат["tables"][0]["name"]).Равно(ИмяТаблицы);

    База = Результат["id"];
    ЗаписатьПараметр("Airtable_Base", База);
    OPI_Инструменты.ДобавитьПоле("Airtable_Base", База, "Строка", Параметры);

    Возврат Результат;

КонецФункции

Функция Проверка_Airtable_ПолучитьТаблицыБазы(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["tables"]).Заполнено();
    ОжидаетЧто(Результат["tables"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Airtable_ПолучитьСписокБаз(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["bases"]).Заполнено();
    ОжидаетЧто(Результат["bases"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Airtable_ПолучитьПолеНомера(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Airtable_ПолучитьПолеСтроковое(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Airtable_ПолучитьПолеВложения(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Airtable_ПолучитьПолеФлажка(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Airtable_ПолучитьПолеДаты(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Airtable_ПолучитьПолеТелефона(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Airtable_ПолучитьПолеПочты(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Airtable_ПолучитьПолеСсылки(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Airtable_СоздатьТаблицу(Знач Результат, Знач Вариант, Параметры = "", Наименование = "", Описание = "")

    ОжидаетЧто(Результат["name"]).Равно(Наименование);
    ОжидаетЧто(Результат["description"]).Равно(Описание);

    Таблица = Результат["id"];
    ЗаписатьПараметр("Airtable_Table", Таблица);
    OPI_Инструменты.ДобавитьПоле("Airtable_Table", Таблица, "Строка", Параметры);

    Возврат Результат;

КонецФункции

Функция Проверка_Airtable_ИзменитьТаблицу(Знач Результат, Знач Вариант, Наименование = "", Описание = "")

    ОжидаетЧто(Результат["name"]).Равно(Наименование);
    ОжидаетЧто(Результат["description"]).Равно(Описание);

    Возврат Результат;

КонецФункции

Функция Проверка_Airtable_СоздатьПоле(Знач Результат, Знач Вариант, Параметры = "", Имя = "")

    ОжидаетЧто(Результат["name"]).Равно(Имя);

    Поле = Результат["id"];
    ЗаписатьПараметр("Airtable_Field", Поле);
    OPI_Инструменты.ДобавитьПоле("Airtable_Field", Поле, "Строка", Параметры);

    Возврат Результат;

КонецФункции

Функция Проверка_Airtable_ИзменитьПоле(Знач Результат, Знач Вариант, Наименование = "", Описание = "")

    ОжидаетЧто(Результат["name"]).Равно(Наименование);
    ОжидаетЧто(Результат["description"]).Равно(Описание);

    Возврат Результат;

КонецФункции

Функция Проверка_Airtable_СоздатьЗаписи(Знач Результат, Знач Вариант, Параметры = "", Числовой = "", Строчный = "")

    Если Не ЗначениеЗаполнено(Вариант) Тогда

        ОжидаетЧто(Результат["records"]).ИмеетТип("Массив");
        ОжидаетЧто(Результат["records"]).Заполнено();

    Иначе

        ОдиночнаяЗапись = Результат["id"];
        ОжидаетЧто(ОдиночнаяЗапись).Заполнено();
        ОжидаетЧто(Результат["createdTime"]).Заполнено();
        ОжидаетЧто(Результат["fields"]["Номер"]).Равно(Числовой);
        ОжидаетЧто(СокрЛП(Результат["fields"]["Строковое"])).Равно(Строчный);

        Запись = Результат["id"];
        ЗаписатьПараметр("Airtable_Record", Запись);
        OPI_Инструменты.ДобавитьПоле("Airtable_Record", Запись, "Строка", Параметры);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_Airtable_ПолучитьЗапись(Знач Результат, Знач Вариант, Запись = "")

    ОжидаетЧто(Результат["id"]).Равно(Запись);

    Возврат Результат;

КонецФункции

Функция Проверка_Airtable_СоздатьКомментарий(Знач Результат, Знач Вариант, Параметры = "", Текст = "")

    ОжидаетЧто(Результат["text"]).Равно(Текст);

    Комментарий = Результат["id"];
    ЗаписатьПараметр("Airtable_Comment", Комментарий);
    OPI_Инструменты.ДобавитьПоле("Airtable_Comment", Комментарий, "Строка", Параметры);

    Возврат Результат;

КонецФункции

Функция Проверка_Airtable_ИзменитьКомментарий(Знач Результат, Знач Вариант, Текст = "")

    ОжидаетЧто(Результат["text"]).Равно(Текст);

    Возврат Результат;

КонецФункции

Функция Проверка_Airtable_ПолучитьКомментарии(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["comments"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Airtable_УдалитьКомментарий(Знач Результат, Знач Вариант, Комментарий = "")

    ОжидаетЧто(Результат["deleted"]).Равно(Истина);
    ОжидаетЧто(Результат["id"]).Равно(Комментарий);

    Возврат Результат;

КонецФункции

Функция Проверка_Airtable_ПолучитьСписокЗаписей(Знач Результат, Знач Вариант, Комментарий = "")

    ОжидаетЧто(Результат["records"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["records"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Airtable_УдалитьЗаписи(Знач Результат, Знач Вариант, Комментарий = "")

    ОжидаетЧто(Результат["records"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["records"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Notion_СоздатьСтраницу(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["object"]).Равно("page");

    Страница = Результат["id"];
    ЗаписатьПараметр("Notion_Page", Страница);
    OPI_Инструменты.ДобавитьПоле("Notion_Page", Страница, "Строка", Параметры);

    Возврат Результат;

КонецФункции

Функция Проверка_Notion_СоздатьБазуДанных(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["object"]).Равно("database");

    База = Результат["id"];
    ЗаписатьПараметр("Notion_Base", База);
    OPI_Инструменты.ДобавитьПоле("Notion_Base", База, "Строка", Параметры);

    Возврат Результат;

КонецФункции

Функция Проверка_Notion_ИзменитьСвойстваБазы(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["object"]).Равно("database");

    Возврат Результат;

КонецФункции

Функция Проверка_Notion_ПолучитьСтраницу(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["object"]).Равно("page");

    Возврат Результат;

КонецФункции

Функция Проверка_Notion_ПолучитьБазуДанных(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["object"]).Равно("database");

    Возврат Результат;

КонецФункции

Функция Проверка_Notion_СоздатьСтраницуВБазу(Знач Результат, Знач Вариант, База = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["object"]).Равно("page");

    Родитель = Результат["parent"]["database_id"];
    ОжидаетЧто(Родитель).Равно(База);

    Возврат Результат;

КонецФункции

Функция Проверка_Notion_ИзменитьСвойстваСтраницы(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["object"]).Равно("page");

    Возврат Результат;

КонецФункции

Функция Проверка_Notion_ВернутьБлок(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["object"]).Равно("block");

    Возврат Результат;

КонецФункции

Функция Проверка_Notion_СоздатьБлок(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["object"]).Равно("list");

    Блок = Результат["results"][0]["id"];
    ЗаписатьПараметр("Notion_NewBlock", Блок);
    OPI_Инструменты.ДобавитьПоле("Notion_NewBlock", Блок, "Строка", Параметры);

    Возврат Результат;

КонецФункции

Функция Проверка_Notion_ВернутьДочерниеБлоки(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["object"]).Равно("list");

    Возврат Результат;

КонецФункции

Функция Проверка_Notion_УдалитьБлок(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["object"]).Равно("block");

    Возврат Результат;

КонецФункции

Функция Проверка_Notion_СписокПользователей(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["object"]).Равно("list");

    Возврат Результат;

КонецФункции

Функция Проверка_Notion_ПолучитьДанныеПользователя(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["object"]).Равно("user");

    Возврат Результат;

КонецФункции

Функция Проверка_Dropbox_ПолучитьСсылкуАвторизации(Знач Результат, Знач Вариант)

    Если ТипЗнч(Результат) = Тип("ДвоичныеДанные") Тогда
        Результат = ПолучитьСтрокуИзДвоичныхДанных(Результат);
    КонецЕсли;

    ОжидаетЧто(Результат).ИмеетТип("Строка");
    ОжидаетЧто(СтрНачинаетсяС(Результат, "https://www.dropbox.com/oauth2")).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Dropbox_ПолучитьТокен(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();

    Токен  = Результат["access_token"];
    Рефреш = Результат["refresh_token"];

    Если ЗначениеЗаполнено(Токен) Тогда
        ЗаписатьПараметр("Dropbox_Token", Токен);
    КонецЕсли;

    Если ЗначениеЗаполнено(Рефреш) Тогда
        ЗаписатьПараметр("Dropbox_Refresh", Рефреш);
    КонецЕсли;

    Возврат Неопределено;

КонецФункции

Функция Проверка_Dropbox_ОбновитьТокен(Знач Результат, Знач Вариант)

    Токен = Результат["access_token"];

    ОжидаетЧто(Токен).ИмеетТип("Строка").Заполнено();
    ЗаписатьПараметр("Dropbox_Token", Токен);

    Возврат Неопределено;

КонецФункции

Функция Проверка_Dropbox_ПолучитьИнформациюОбОбъекте(Знач Результат, Знач Вариант, Путь = "")

    ОжидаетЧто(Результат["path_display"]).Равно(Путь);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Dropbox_ПолучитьПревью(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("ДвоичныеДанные");
    ОжидаетЧто(Результат.Размер() >= 12000).Равно(Истина);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Dropbox_ЗагрузитьФайл(Знач Результат, Знач Вариант, Путь = "")

    ОжидаетЧто(Результат["path_display"]).Равно(Путь);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Dropbox_ЗагрузитьФайлПоURL(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["async_job_id"]).Заполнено();

    Работа = Результат["async_job_id"];
    Параметры.Вставить("Dropbox_Job", Работа);
    ЗаписатьПараметр("Dropbox_Job", Работа);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Dropbox_ПолучитьСтатусЗагрузкиПоURL(Знач Результат, Знач Вариант, Путь = "")

    Если Не ЗначениеЗаполнено(Вариант) Тогда

        ОжидаетЧто(Результат[".tag"]).Равно("complete");

        OPI_Инструменты.Пауза(2);

    КонецЕсли;

    Если Вариант = "Удаление" Тогда
        ОжидаетЧто(Результат["metadata"]["path_display"]).Равно(Путь);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_Dropbox_УдалитьОбъект(Знач Результат, Знач Вариант, Путь = "")

    ОжидаетЧто(Результат["metadata"]["path_display"]).Равно(Путь);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Dropbox_КопироватьОбъект(Знач Результат, Знач Вариант, Путь = "")

    ОжидаетЧто(Результат["metadata"]["path_display"]).Равно(Путь);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Dropbox_ПереместитьОбъект(Знач Результат, Знач Вариант, Путь = "")

    ОжидаетЧто(Результат["metadata"]["path_display"]).Равно(Путь);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Dropbox_СоздатьПапку(Знач Результат, Знач Вариант, Путь = "")

    ОжидаетЧто(Результат["metadata"]["path_display"]).Равно(Путь);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Dropbox_СкачатьФайл(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("ДвоичныеДанные");
    ОжидаетЧто(Результат.Размер() >= 2000000).Равно(Истина);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Dropbox_СкачатьПапку(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("ДвоичныеДанные");
    ОжидаетЧто(Результат.Размер() >= 200000).Равно(Истина);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Dropbox_ПолучитьСписокФайловПапки(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["entries"]).ИмеетТип("Массив");

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Dropbox_ПолучитьСписокВерсийОбъекта(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["entries"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["entries"].Количество()).Равно(1);

    Ревизия = Результат["entries"][0]["rev"];

    Параметры.Вставить("Dropbox_FileRevision", Ревизия);
    ЗаписатьПараметр("Dropbox_FileRevision", Ревизия);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Dropbox_ВосстановитьОбъектКВерсии(Знач Результат, Знач Вариант, Путь = "")

    ОжидаетЧто(Результат["path_display"]).Равно(Путь);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Dropbox_ПолучитьСписокТегов(Знач Результат, Знач Вариант, Параметры = "", МассивПутей = "")

    ОжидаетЧто(Результат["paths_to_tags"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["paths_to_tags"].Количество()).Равно(МассивПутей.Количество());

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Dropbox_ДобавитьТег(Знач Результат, Знач Вариант)

    Если Не нРег(Строка(Результат)) = "null" Тогда
        ОжидаетЧто(ЗначениеЗаполнено(Результат)).Равно(Ложь);
    КонецЕсли;

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Dropbox_УдалитьТег(Знач Результат, Знач Вариант)

    Если Не нРег(Строка(Результат)) = "null" Тогда
        ОжидаетЧто(ЗначениеЗаполнено(Результат)).Равно(Ложь);
    КонецЕсли;

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Dropbox_ПолучитьИнформациюОбАккаунте(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["account_id"]).Заполнено();

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Dropbox_ПолучитьДанныеИспользованияПространства(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["used"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Dropbox_ДобавитьПользователейКФайлу(Знач Результат, Знач Вариант, Почта = "", ТолькоПросмотр = "")

    ОжидаетЧто(Результат[0]["result"][".tag"]).Равно("success");
    ОжидаетЧто(Результат[0]["member"]["email"]).Равно(Почта);
    ОжидаетЧто(Результат[0]["result"]["success"][".tag"]).Равно(?(ТолькоПросмотр, "viewer", "editor"));

    Возврат Результат;

КонецФункции

Функция Проверка_Dropbox_ОпубликоватьПапку(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["shared_folder_id"]).Заполнено();

    IDПапки = Результат["shared_folder_id"];

    Параметры.Вставить("Dropbox_SharedFolder", IDПапки);
    ЗаписатьПараметр("Dropbox_SharedFolder", IDПапки);

    OPI_Инструменты.Пауза(2);

    Возврат Результат;

КонецФункции

Функция Проверка_Dropbox_ОтменитьПубликациюПапки(Знач Результат, Знач Вариант, Параметры = "", IDРаботы = "")

    Если ЗначениеЗаполнено(Вариант) Тогда

        ОжидаетЧто(Результат[".tag"]).Равно("complete");

        Параметры.Вставить("Dropbox_NewJobID", IDРаботы);
        ЗаписатьПараметр("Dropbox_NewJobID", IDРаботы);

        OPI_Инструменты.Пауза(2);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_Dropbox_ПолучитьСтатусАсинхронногоИзменения(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Dropbox_ДобавитьПользователейКПапке(Знач Результат, Знач Вариант)

    Если Не нРег(Строка(Результат)) = "null" Тогда
        ОжидаетЧто(ЗначениеЗаполнено(Результат)).Равно(Ложь);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_Dropbox_ОтменитьПубликациюФайла(Знач Результат, Знач Вариант)

    Если Не нРег(Строка(Результат)) = "null" Тогда
        ОжидаетЧто(ЗначениеЗаполнено(Результат)).Равно(Ложь);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСсылкуАвторизацииПриложения(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Строка");

    ЗаписатьПараметр("Bitrix24_AuthURL", Результат);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьТокен(Знач Результат, Знач Вариант)

    Если ЗначениеЗаполнено(Результат["access_token"]) И ЗначениеЗаполнено(Результат["refresh_token"]) Тогда

        ЗаписатьПараметр("Bitrix24_Token"  , Результат["access_token"]);
        ЗаписатьПараметр("Bitrix24_Refresh", Результат["refresh_token"]);

    КонецЕсли;

    Возврат Неопределено;

КонецФункции

Функция Проверка_Bitrix24_ОбновитьТокен(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["access_token"]).Заполнено();
    ОжидаетЧто(Результат["refresh_token"]).Заполнено();

    Если ЗначениеЗаполнено(Результат["access_token"]) И ЗначениеЗаполнено(Результат["refresh_token"]) Тогда

        ЗаписатьПараметр("Bitrix24_Token"  , Результат["access_token"]);
        ЗаписатьПараметр("Bitrix24_Refresh", Результат["refresh_token"]);

    КонецЕсли;

    Возврат Неопределено;

КонецФункции

Функция Проверка_Bitrix24_СерверноеВремя(Знач Результат, Знач Вариант)

    Время = Результат["result"];

    Если Не ТипЗнч(Время) = Тип("Дата") Тогда
        Время = XMLЗначение(Тип("Дата"), Время);
    КонецЕсли;

    ОжидаетЧто(Время).ИмеетТип("Дата").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_СоздатьНовость(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["result"]).ИмеетТип("Число").Заполнено();

    Если Вариант = "Хук" Тогда
        ИмяПараметра = "Bitrix24_HookPostID";
    Иначе
        ИмяПараметра = "Bitrix24_PostID";
    КонецЕсли;

    IDНовости = Результат["result"];

    ЗаписатьПараметр(ИмяПараметра, IDНовости);
    Параметры.Вставить(ИмяПараметра, IDНовости);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ИзменитьНовость(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Число").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_УдалитьНовость(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСписокПросмотревшихВажное(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьНовости(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["result"][0]["ID"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ДобавитьКомментарийНовости(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Число").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ДобавитьПолучателейКНовости(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСтруктуруЗадачи(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]["fields"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_СоздатьЗадачу(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["result"]["task"]).Заполнено();

    Если Вариант = "Хук" Тогда
        ИмяПараметра = "Bitrix24_HookTaskID";
    Иначе
        ИмяПараметра = "Bitrix24_TaskID";
    КонецЕсли;

    IDЗадачи = Результат["result"]["task"]["id"];

    ЗаписатьПараметр(ИмяПараметра, IDЗадачи);
    Параметры.Вставить(ИмяПараметра, IDЗадачи);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ИзменитьЗадачу(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]["task"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьЗадачу(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]["task"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПринятьЗадачу(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["error"]).Равно("1048582");

    Возврат Неопределено;

КонецФункции

Функция Проверка_Bitrix24_ОтклонитьЗадачу(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(Результат["error"]).Равно("1048582");

    Возврат Неопределено;

КонецФункции

Функция Проверка_Bitrix24_ЗавершитьЗадачу(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]["task"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ВозобновитьЗадачу(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]["task"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ОтложитьЗадачу(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]["task"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_НачатьВыполнениеЗадачи(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]["task"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_НачатьНаблюдатьЗаЗадачей(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]["task"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПрекратитьНаблюдатьЗаЗадачей(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]["task"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПриостановитьЗадачу(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]["task"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_УдалитьЗадачу(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]["task"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ДелегироватьЗадачу(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]["task"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ДобавитьЗадачуВИзбранное(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_УбратьЗадачуИзИзбранного(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьИсториюЗадачи(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]["list"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСписокЗадач(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]["tasks"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСписокХранилищ(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["total"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьХранилищеПриложения(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["result"]["ID"]).Заполнено();

    IDХранилища = Результат["result"]["ID"];
    ЗаписатьПараметр("Bitrix24_StorageID", IDХранилища);
    Параметры.Вставить("Bitrix24_StorageID", IDХранилища);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ЗагрузитьФайлВХранилище(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["result"]["ID"]).Заполнено();

    Если Вариант = "Хук" Тогда
        ИмяПараметра = "Bitrix24_HookFileID";
    Иначе
        ИмяПараметра = "Bitrix24_FileID";
    КонецЕсли;

    IDФайла = Результат["result"]["ID"];

    ЗаписатьПараметр(ИмяПараметра, IDФайла);
    Параметры.Вставить(ИмяПараметра, IDФайла);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_УдалитьФайл(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_СоздатьКаталогВХранилище(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["result"]["ID"]).Заполнено();

    Если Вариант = "Хук" Тогда
        ИмяПараметра = "Bitrix24_HookFolderID";
    Иначе
        ИмяПараметра = "Bitrix24_FolderID";
    КонецЕсли;

    IDКаталога = Результат["result"]["ID"];

    ЗаписатьПараметр(ИмяПараметра, IDКаталога);
    Параметры.Вставить(ИмяПараметра, IDКаталога);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_УдалитьКаталог(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьХранилище(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["result"]["ID"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСодержимоеХранилища(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПереименоватьХранилище(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["result"]["ID"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьИнформациюОКаталоге(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["result"]["ID"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_СоздатьПодкаталог(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["result"]["ID"]).Заполнено();

    Если Вариант = "Хук" Тогда
        ИмяПараметра = "Bitrix24_HookSubfolderID";
    Иначе
        ИмяПараметра = "Bitrix24_SubfolderID";
    КонецЕсли;

    IDПодкаталога = Результат["result"]["ID"];

    ЗаписатьПараметр(ИмяПараметра, IDПодкаталога);
    Параметры.Вставить(ИмяПараметра, IDПодкаталога);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_СкопироватьКаталог(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["result"]["ID"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьВнешнююСсылкуКаталога(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Строка").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСтруктуруФильтраКаталога(Знач Результат, Знач Вариант)

    ТипРезультата = ТипЗнч(Результат);

    ОжидаетЧто(ТипРезультата = Тип("Структура") Или ТипРезультата = Тип("Соответствие")).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьДочерниеЭлементыКаталога(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПоместитьКаталогВКорзину(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["result"]["ID"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ВосстановитьКаталог(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["result"]["ID"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПереместитьКаталог(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["result"]["ID"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПереименоватьКаталог(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["result"]["ID"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ЗагрузитьФайлВКаталог(Знач Результат, Знач Вариант, URL = "", Токен = "")

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["result"]["ID"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_СкопироватьФайл(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["result"]["ID"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьИнформациюОФайле(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["result"]["ID"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьВнешнююСсылкуФайла(Знач Результат, Знач Вариант)

    Возврат Неопределено;

КонецФункции

Функция Проверка_Bitrix24_ПоместитьФайлВКорзину(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["result"]["ID"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ВосстановитьФайл(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["result"]["ID"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПереименоватьФайл(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["result"]["ID"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПереместитьФайлВКаталог(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["result"]["ID"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ДобавитьФайлВЗадачу(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["result"]["attachmentId"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПроверитьДоступКЗадаче(Знач Результат, Знач Вариант, Количество = "")

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");

    Действия = Результат["result"]["allowedActions"];
    ОжидаетЧто(Действия).ИмеетТип("Соответствие");
    ОжидаетЧто(Действия.Количество()).Равно(Количество);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ОтключитьЗвукЗадачи(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]["task"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ВключитьЗвукЗадачи(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]["task"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ДобавитьКомментарийЗадачи(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["result"]).ИмеетТип("Число").Заполнено();

    Если Вариант = "Хук" Тогда
        ИмяПараметра = "Bitrix24_HookCommentID";
    Иначе
        ИмяПараметра = "Bitrix24_CommentID";
    КонецЕсли;

    IDКомментария = Результат["result"];

    ЗаписатьПараметр(ИмяПараметра, IDКомментария);
    Параметры.Вставить(ИмяПараметра, IDКомментария);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_УдалитьКомментарийЗадачи(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_СоздатьРезультатИзКомментария(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["result"]["text"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_УдалитьРезультатИзКомментария(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Неопределено");
    ОжидаетЧто(Результат["time"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСписокРезультатов(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["result"][0]["text"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСписокКомментариевЗадачи(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["result"][0]["POST_MESSAGE"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьКомментарийЗадачи(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["result"]["ID"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ИзменитьКомментарийЗадачи(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
    ОжидаетЧто(СтрНайти(Результат["error_description"], "not allowed") > 0).Равно(Истина);

    Возврат Неопределено;

КонецФункции

Функция Проверка_Bitrix24_СоздатьЗависимостьЗадач(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_УдалитьЗависимостьЗадач(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ДобавитьСтадиюКанбана(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["result"]).ИмеетТип("Число").Заполнено();

    Если Вариант = "Хук" Тогда
        ИмяПараметра = "Bitrix24_HookStageID";
    Иначе
        ИмяПараметра = "Bitrix24_StageID";
    КонецЕсли;

    IDСтадии = Результат["result"];

    ЗаписатьПараметр(ИмяПараметра, IDСтадии);
    Параметры.Вставить(ИмяПараметра, IDСтадии);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_УдалитьСтадиюКанбана(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСтадииКанбана(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПеренестиЗадачуВСтадиюКанбана(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ИзменитьСтадиюКанбана(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ДобавитьЭлементЧеклистаЗадачи(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["result"]).ИмеетТип("Число").Заполнено();

    Если Вариант = "Хук" Тогда
        ИмяПараметра = "Bitrix24_HookCheckElementID";
    Иначе
        ИмяПараметра = "Bitrix24_CheckElementID";
    КонецЕсли;

    IDЭлемента = Результат["result"];

    ЗаписатьПараметр(ИмяПараметра, IDЭлемента);
    Параметры.Вставить(ИмяПараметра, IDЭлемента);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ИзменитьЭлементЧеклистаЗадачи(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Неопределено");
    ОжидаетЧто(Результат["time"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_УдалитьЭлементЧеклистаЗадачи(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьЧеклистЗадачи(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьЭлементЧеклистаЗадачи(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["result"]["ID"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ВыполнитьЭлементЧеклистаЗадачи(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ВозобновитьЭлементЧеклистаЗадачи(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ДобавитьТрудозатратыЗадачи(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["result"]).ИмеетТип("Число").Заполнено();

    Если Вариант = "Хук" Тогда
        ИмяПараметра = "Bitrix24_HookTimeID";
    Иначе
        ИмяПараметра = "Bitrix24_TimeID";
    КонецЕсли;

    IDЗатрат = Результат["result"];

    ЗаписатьПараметр(ИмяПараметра, IDЗатрат);
    Параметры.Вставить(ИмяПараметра, IDЗатрат);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ИзменитьТрудозатратыЗадачи(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Неопределено");
    ОжидаетЧто(Результат["time"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_УдалитьТрудозатратыЗадачи(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Неопределено");
    ОжидаетЧто(Результат["time"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьТрудозатратыЗадачи(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["result"]["ID"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСписокТрудозатратЗадачи(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["result"][0]["ID"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьПланЗадачНаДень(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_СоздатьЧат(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["result"]).ИмеетТип("Число").Заполнено();

    Если Вариант = "Хук" Тогда
        ИмяПараметра = "Bitrix24_HookChatID";
    Иначе
        ИмяПараметра = "Bitrix24_ChatID";
    КонецЕсли;

    IDЧата = Результат["result"];

    ЗаписатьПараметр(ИмяПараметра, IDЧата);
    Параметры.Вставить(ИмяПараметра, IDЧата);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСписокПользователейЧата(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПокинутьЧат(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ИсключитьПользователяИзЧата(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ДобавитьПользователейВЧат(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ИзменитьЗаголовокЧата(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ИзменитьЦветЧата(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    OPI_Инструменты.Пауза(10);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ИзменитьКартинкуЧата(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ОтключитьУведомленияЧата(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ВключитьУведомленияЧата(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_СменитьВладельцаЧата(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСписокСообщенийЧата(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["result"]["messages"]).ИмеетТип("Массив");

    Если Вариант = "Хук" Тогда
        ИмяПараметра = "Bitrix24_ChatMessageID";
    Иначе
        ИмяПараметра = "Bitrix24_UserMessageID";
    КонецЕсли;

    IDСообщения = Результат["result"]["messages"][0]["id"];

    ЗаписатьПараметр(ИмяПараметра, IDСообщения);
    Параметры.Вставить(ИмяПараметра, IDСообщения);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ОтметитьСообщениеКакПрочитанное(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");

    Возврат Неопределено;

КонецФункции

Функция Проверка_Bitrix24_ОтметитьСообщениеКакНепрочитанное(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьДиалог(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["result"]["id"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСписокПользователейДиалога(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ОтправитьУведомлениеОВводе(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПрочитатьВсе(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ОтправитьСообщение(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["result"]).ИмеетТип("Число").Заполнено();

    Если Вариант = "Хук" Тогда
        ИмяПараметра = "Bitrix24_ChatMessageID";
    Иначе
        ИмяПараметра = "Bitrix24_UserMessageID";
    КонецЕсли;

    IDСообщения = Результат["result"];

    ЗаписатьПараметр(ИмяПараметра, IDСообщения);
    Параметры.Вставить(ИмяПараметра, IDСообщения);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ИзменитьСообщение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_УдалитьСообщение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_УстановитьРеакциюНаСообщение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьКаталогФайловЧата(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["result"]["ID"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ОтправитьФайл(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["result"]["MESSAGE_ID"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьПользователей(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСтатусПользователя(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Строка").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_УстановитьСтатусПользователя(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_СоздатьПерсональноеУведомление(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["result"]).ИмеетТип("Число").Заполнено();

    Если Вариант = "Хук" Тогда
        ИмяПараметра = "Bitrix24_PersonalHookNotifyID";
    Иначе
        ИмяПараметра = "Bitrix24_PersonalNotifyID";
    КонецЕсли;

    IDСообщения = Результат["result"];

    ЗаписатьПараметр(ИмяПараметра, IDСообщения);
    Параметры.Вставить(ИмяПараметра, IDСообщения);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_СоздатьСистемноеУведомление(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["result"]).ИмеетТип("Число").Заполнено();

    Если Вариант = "Хук" Тогда
        ИмяПараметра = "Bitrix24_SystemHookNotifyID";
    Иначе
        ИмяПараметра = "Bitrix24_SystemNotifyID";
    КонецЕсли;

    IDСообщения = Результат["result"];

    ЗаписатьПараметр(ИмяПараметра, IDСообщения);
    Параметры.Вставить(ИмяПараметра, IDСообщения);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_УдалитьУведомление(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево");

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_СоздатьПодразделение(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["result"]).ИмеетТип("Число").Заполнено();

    Если Вариант = "Хук" Тогда
        ИмяПараметра = "Bitrix24_HookDepID";
    Иначе
        ИмяПараметра = "Bitrix24_DepID";
    КонецЕсли;

    IDПодразделения = Результат["result"];

    ЗаписатьПараметр(ИмяПараметра, IDПодразделения);
    Параметры.Вставить(ИмяПараметра, IDПодразделения);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ИзменитьПодразделение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_УдалитьПодразделение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьПодразделения(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьТекущегоПользователя(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["result"]["ID"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСтруктуруПользователя(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["result"]["ID"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_СоздатьПользователя(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["result"]).ИмеетТип("Число").Заполнено();

    Если Вариант = "Хук" Тогда
        ИмяПараметра = "Bitrix24_HookUserID";
    Иначе
        ИмяПараметра = "Bitrix24_UserID";
    КонецЕсли;

    IDПользователя = Результат["result"];

    ЗаписатьПараметр(ИмяПараметра, IDПользователя);
    Параметры.Вставить(ИмяПараметра, IDПользователя);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ИзменитьПользователя(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ИзменитьСтатусПользователя(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьПользователя(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_НайтиПользователей(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСтруктуруФильтраЛидов(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСтруктуруЛида(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]["PHONE"]).Заполнено();
    ОжидаетЧто(Результат["result"]["NAME"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_СоздатьЛид(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["result"]).ИмеетТип("Число").Заполнено();

    Если Вариант = "Хук" Тогда
        ИмяПараметра = "Bitrix24_HookLeadID";
    Иначе
        ИмяПараметра = "Bitrix24_LeadID";
    КонецЕсли;

    IDЛида = Результат["result"];

    ЗаписатьПараметр(ИмяПараметра, IDЛида);
    Параметры.Вставить(ИмяПараметра, IDЛида);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ИзменитьЛид(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_УдалитьЛид(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьЛид(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]["PHONE"]).Заполнено();
    ОжидаетЧто(Результат["result"]["NAME"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСписокЛидов(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСтруктуруФильтраСделок(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСтруктуруСделки(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]["ID"]).Заполнено();
    ОжидаетЧто(Результат["result"]["BEGINDATE"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_СоздатьСделку(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["result"]).ИмеетТип("Число").Заполнено();

    Если Вариант = "Хук" Тогда
        ИмяПараметра = "Bitrix24_HookDealID";
    Иначе
        ИмяПараметра = "Bitrix24_DealID";
    КонецЕсли;

    IDСделки = Результат["result"];

    ЗаписатьПараметр(ИмяПараметра, IDСделки);
    Параметры.Вставить(ИмяПараметра, IDСделки);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ИзменитьСделку(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСделку(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]["ID"]).Заполнено();
    ОжидаетЧто(Результат["result"]["BEGINDATE"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_УдалитьСделку(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСписокСделок(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСтруктуруФильтраЗадач(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСтруктуруКомментария(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСтруктуруЧата(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьБлокКартинки(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьБлокФайла(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСтруктуруФильтраПользователей(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_СоздатьКалендарь(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["result"]).ИмеетТип("Число").Заполнено();

    Если Вариант = "Хук" Тогда
        ИмяПараметра = "Bitrix24_HookCalendarID";
    Иначе
        ИмяПараметра = "Bitrix24_CalendarID";
    КонецЕсли;

    IDКалендаря = Результат["result"];

    ЗаписатьПараметр(ИмяПараметра, IDКалендаря);
    Параметры.Вставить(ИмяПараметра, IDКалендаря);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ИзменитьКалендарь(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Число").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_УдалитьКалендарь(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСтруктуруКалендаря(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Если Вариант = "Пустая" Тогда

        Для Каждого Элемент Из Результат Цикл

            Если OPI_Инструменты.ЭтоПримитивныйТип(Элемент.Значение) Тогда
                ОжидаетЧто(ЗначениеЗаполнено(Элемент.Значение)).Равно(Ложь);
            КонецЕсли;

        КонецЦикла;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСписокКалендарей(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСтруктуруНастроекКалендаря(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСтруктуруПользовательскихНастроекКалендаря(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Если Вариант = "Пустая" Тогда

        Для Каждого Элемент Из Результат Цикл

            Если OPI_Инструменты.ЭтоПримитивныйТип(Элемент.Значение) Тогда
                ОжидаетЧто(ЗначениеЗаполнено(Элемент.Значение)).Равно(Ложь);
            КонецЕсли;

        КонецЦикла;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьПользовательскиеНастройкиКалендаря(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_УстановитьПользовательскиеНастройкиКалендаря(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьЗанятостьПользователей(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_СоздатьСобытиеКалендаря(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["result"]).ИмеетТип("Число").Заполнено();

    Если Вариант = "Хук" Тогда
        ИмяПараметра = "Bitrix24_HookCEventID";
    Иначе
        ИмяПараметра = "Bitrix24_CEventID";
    КонецЕсли;

    IDСобытия = Результат["result"];

    ЗаписатьПараметр(ИмяПараметра, IDСобытия);
    Параметры.Вставить(ИмяПараметра, IDСобытия);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ИзменитьСобытиеКалендаря(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["result"]).ИмеетТип("Число").Заполнено();

    Если Вариант = "Хук" Тогда
        ИмяПараметра = "Bitrix24_HookCEventID";
    Иначе
        ИмяПараметра = "Bitrix24_CEventID";
    КонецЕсли;

    IDСобытия = Результат["result"];

    ЗаписатьПараметр(ИмяПараметра, IDСобытия);
    Параметры.Вставить(ИмяПараметра, IDСобытия);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_УдалитьСобытиеКалендаря(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСобытиеКалендаря(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Соответствие");

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСобытияКалендарей(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_УстановитьСтатусУчастияПользователя(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Булево").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСтатусУчастияПользователя(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).ИмеетТип("Строка").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСтруктуруСобытияКалендаря(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Если Вариант = "Пустая" Тогда

        Для Каждого Элемент Из Результат Цикл

            Если OPI_Инструменты.ЭтоПримитивныйТип(Элемент.Значение) Тогда
                ОжидаетЧто(ЗначениеЗаполнено(Элемент.Значение)).Равно(Ложь);
            КонецЕсли;

        КонецЦикла;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_Bitrix24_ПолучитьСтруктуруФильтраСобытийКалендарей(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Если Вариант = "Пустая" Тогда

        Для Каждого Элемент Из Результат Цикл

            Если OPI_Инструменты.ЭтоПримитивныйТип(Элемент.Значение) Тогда
                ОжидаетЧто(ЗначениеЗаполнено(Элемент.Значение)).Равно(Ложь);
            КонецЕсли;

        КонецЦикла;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_VKTeams_ПроверитьТокен(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["userId"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_VKTeams_ПолучитьСобытия(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["events"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_VKTeams_ОтправитьТекстовоеСообщение(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["msgId"]).Заполнено();

    Если Не ЗначениеЗаполнено(Вариант) Тогда

        IDСообщения = Результат["msgId"];
        ЗаписатьПараметр("VKTeams_MessageID", IDСообщения);
        Параметры.Вставить("VKTeams_MessageID", IDСообщения);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_VKTeams_ПереслатьСообщение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["msgId"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_VKTeams_ОтправитьФайл(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["msgId"]).Заполнено();

    Если Не ЗначениеЗаполнено(Вариант) Тогда

        IDФайла = Результат["fileId"];
        ЗаписатьПараметр("VKTeams_FileID", IDФайла);
        Параметры.Вставить("VKTeams_FileID", IDФайла);

        OPI_Инструменты.Пауза(2);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_VKTeams_ПереслатьФайл(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["msgId"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_VKTeams_ПолучитьИнформациюОФайле(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["type"]).Заполнено();
    ОжидаетЧто(Результат["size"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_VKTeams_ИзменитьТекстСообщения(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_VKTeams_УдалитьСообщение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_VKTeams_ОтправитьГолосовоеСообщение(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["msgId"]).Заполнено();

    Если Не ЗначениеЗаполнено(Вариант) Тогда

        IDФайла = Результат["fileId"];
        ЗаписатьПараметр("VKTeams_VoiceID", IDФайла);
        Параметры.Вставить("VKTeams_VoiceID", IDФайла);

        OPI_Инструменты.Пауза(2);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_VKTeams_ПереслатьГолосовоеСообщение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["ok"]).Равно(Истина);
    ОжидаетЧто(Результат["msgId"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_VKTeams_ИсключитьПользователейЧата(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_VKTeams_ИзменитьАватарЧата(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_VKTeams_ПолучитьИнформациюОЧате(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["type"]).Заполнено();
    ОжидаетЧто(Результат["inviteLink"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_VKTeams_ПолучитьАдминистраторовЧата(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["admins"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_VKTeams_ПолучитьПользователейЧата(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["members"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_VKTeams_ПолучитьЗаблокированныхПользователейЧата(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["users"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_VKTeams_ПолучитьЗапросыВступленияЧата(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["users"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_VKTeams_ЗаблокироватьПользователяЧата(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_VKTeams_РазблокироватьПользователяЧата(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_VKTeams_ЗакрепитьСообщение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_VKTeams_ОткрепитьСообщение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_VKTeams_ОдобритьЗаявкуНаВступление(Знач Результат, Знач Вариант)

    Если Не Результат["ok"] Тогда
        ОжидаетЧто(Результат["description"]).Равно("User is not pending or nobody in pending list");
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_VKTeams_ОтклонитьЗаявкуНаВступление(Знач Результат, Знач Вариант)

    Если Не Результат["ok"] Тогда
        ОжидаетЧто(Результат["description"]).Равно("User is not pending or nobody in pending list");
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_VKTeams_УстановитьЗаголовокЧата(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_VKTeams_УстановитьОписаниеЧата(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_VKTeams_УстановитьПравилаЧата(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_VKTeams_ОтветитьНаСобытиеКлавиатуры(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["ok"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Neocities_ЗагрузитьФайл(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно("success");

    Возврат Результат;

КонецФункции

Функция Проверка_Neocities_ЗагрузитьФайлы(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно("success");

    Возврат Результат;

КонецФункции

Функция Проверка_Neocities_УдалитьВыбранныеФайлы(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно("success");

    Возврат Результат;

КонецФункции

Функция Проверка_Neocities_ПолучитьСписокФайлов(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно("success");

    Возврат Результат;

КонецФункции

Функция Проверка_Neocities_ПолучитьДанныеОСайте(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно("success");

    Возврат Результат;

КонецФункции

Функция Проверка_Neocities_ПолучитьТокен(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно("success");

    Возврат Результат;

КонецФункции

Функция Проверка_Neocities_СинхронизироватьКаталоги(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["errors"]).Равно(0);
    ОжидаетЧто(Результат["items"].Количество()).Равно(0);

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_ПолучитьТокен(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["access_token"]).Заполнено();
    ОжидаетЧто(Результат["expires_in"]).Заполнено();
    ОжидаетЧто(Результат["token_type"]).Заполнено();

    Токен = Результат["access_token"];
    ЗаписатьПараметр("CDEK_Token", Токен);
    OPI_Инструменты.ДобавитьПоле("CDEK_Token", Токен, "Строка", Параметры);

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_ПолучитьОписаниеЗаказа(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_СоздатьЗаказ(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["entity"]["uuid"]).Заполнено();
    ОжидаетЧто(Результат["requests"]).ИмеетТип("Массив").Заполнено();

    Статус = Результат["requests"][0]["state"];

    ОжидаетЧто(Статус = "ACCEPTED" Или Статус = "SUCCESSFUL").Равно(Истина);

    UUID = Результат["entity"]["uuid"];
    ЗаписатьПараметр("CDEK_OrderUUID", UUID);
    OPI_Инструменты.ДобавитьПоле("CDEK_OrderUUID", UUID, "Строка", Параметры);

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_ПолучитьЗаказ(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["entity"]["uuid"]).Заполнено();
    ОжидаетЧто(Результат["entity"]["number"]).Заполнено();

    ВнутреннийНомер = Результат["entity"]["number"];
    ЗаписатьПараметр("CDEK_OrderIMN", ВнутреннийНомер);
    OPI_Инструменты.ДобавитьПоле("CDEK_OrderIMN", ВнутреннийНомер, "Строка", Параметры);

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_ПолучитьЗаказПоНомеру(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["entity"]["uuid"]).Заполнено();
    ОжидаетЧто(Результат["entity"]["number"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_ИзменитьЗаказ(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["entity"]["uuid"]).Заполнено();
    ОжидаетЧто(Результат["requests"]).ИмеетТип("Массив").Заполнено();

    Статус = Результат["requests"][0]["state"];

    ОжидаетЧто(Статус = "ACCEPTED" Или Статус = "SUCCESSFUL").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_УдалитьЗаказ(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["entity"]["uuid"]).Заполнено();
    ОжидаетЧто(Результат["requests"]).ИмеетТип("Массив").Заполнено();

    Статус = Результат["requests"][0]["state"];

    ОжидаетЧто(Статус = "ACCEPTED" Или Статус = "SUCCESSFUL").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_ОформитьКлиентскийВозврат(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["entity"]["uuid"]).Заполнено();
    ОжидаетЧто(Результат["requests"]).ИмеетТип("Массив").Заполнено();

    Статус = Результат["requests"][0]["state"];

    ОжидаетЧто(Статус = "ACCEPTED" Или Статус = "SUCCESSFUL").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_СоздатьОтказ(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["entity"]["uuid"]).Заполнено();
    ОжидаетЧто(Результат["requests"]).ИмеетТип("Массив").Заполнено();

    Статус = Результат["requests"][0]["state"];

    ОжидаетЧто(Статус = "ACCEPTED" Или Статус = "SUCCESSFUL").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_ПолучитьОписаниеЗаявкиКурьера(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_СоздатьЗаявкуНаВызовКурьера(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["entity"]["uuid"]).Заполнено();
    ОжидаетЧто(Результат["requests"]).ИмеетТип("Массив").Заполнено();

    Статус = Результат["requests"][0]["state"];

    ОжидаетЧто(Статус = "ACCEPTED" Или Статус = "SUCCESSFUL").Равно(Истина);

    UUID = Результат["entity"]["uuid"];
    ЗаписатьПараметр("CDEK_IntakeUUID", UUID);
    OPI_Инструменты.ДобавитьПоле("CDEK_IntakeUUID", UUID, "Строка", Параметры);

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_ПолучитьЗаявкуНаВызовКурьера(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["entity"]["uuid"]).Заполнено();
    ОжидаетЧто(Результат["requests"]).ИмеетТип("Массив").Заполнено();

    Статус = Результат["requests"][0]["state"];

    ОжидаетЧто(Статус = "ACCEPTED" Или Статус = "SUCCESSFUL").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_УдалитьЗаявкуНаВызовКурьера(Знач Результат, Знач Вариант)

    // ОжидаетЧто(Результат["entity"]["uuid"]).Заполнено();
    // ОжидаетЧто(Результат["requests"]).ИмеетТип("Массив").Заполнено();

    // Статус = Результат["requests"][0]["state"];

    // ОжидаетЧто(Статус = "ACCEPTED" Или Статус = "SUCCESSFUL").Равно(Истина);

    Возврат Неопределено;

КонецФункции

Функция Проверка_CDEK_СформироватьКвитанцию(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["entity"]["uuid"]).Заполнено();
    ОжидаетЧто(Результат["requests"]).ИмеетТип("Массив").Заполнено();

    Статус = Результат["requests"][0]["state"];

    ОжидаетЧто(Статус = "ACCEPTED" Или Статус = "SUCCESSFUL").Равно(Истина);

    UUID = Результат["entity"]["uuid"];
    ЗаписатьПараметр("CDEK_PrintUUID", UUID);
    OPI_Инструменты.ДобавитьПоле("CDEK_PrintUUID", UUID, "Строка", Параметры);

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_ПолучитьКвитанцию(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["entity"]["statuses"][0]["code"]).Равно("ACCEPTED");
    ОжидаетЧто(Результат["entity"]["copy_count"]).Равно(1);

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_СформироватьШтрихкод(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["entity"]["uuid"]).Заполнено();
    ОжидаетЧто(Результат["requests"]).ИмеетТип("Массив").Заполнено();

    Статус = Результат["requests"][0]["state"];

    ОжидаетЧто(Статус = "ACCEPTED" Или Статус = "SUCCESSFUL").Равно(Истина);

    UUID = Результат["entity"]["uuid"];
    ЗаписатьПараметр("CDEK_BarcodeUUID", UUID);
    OPI_Инструменты.ДобавитьПоле("CDEK_BarcodeUUID", UUID, "Строка", Параметры);

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_ПолучитьШтрихкод(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["entity"]["statuses"][0]["code"]).Равно("ACCEPTED");
    ОжидаетЧто(Результат["entity"]["copy_count"]).Равно(1);

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_ПолучитьДоступныеИнтервалыДоставки(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["date_intervals"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_ПолучитьОписаниеДоговоренности(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_ЗафиксироватьДоговоренностьОДоставке(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["entity"]["uuid"]).Заполнено();
    ОжидаетЧто(Результат["requests"]).ИмеетТип("Массив").Заполнено();

    Статус = Результат["requests"][0]["state"];

    ОжидаетЧто(Статус = "ACCEPTED" Или Статус = "SUCCESSFUL").Равно(Истина);

    UUID = Результат["entity"]["uuid"];
    ЗаписатьПараметр("CDEK_ApptUUID", UUID);
    OPI_Инструменты.ДобавитьПоле("CDEK_ApptUUID", UUID, "Строка", Параметры);

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_ПолучитьДоговоренностьОДоставке(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_СоздатьПреалерт(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["entity"]["uuid"]).Заполнено();
    ОжидаетЧто(Результат["requests"]).ИмеетТип("Массив").Заполнено();

    Статус = Результат["requests"][0]["state"];

    ОжидаетЧто(Статус = "ACCEPTED" Или Статус = "SUCCESSFUL").Равно(Истина);

    UUID = Результат["entity"]["uuid"];
    ЗаписатьПараметр("CDEK_PrealertUUID", UUID);
    OPI_Инструменты.ДобавитьПоле("CDEK_PrealertUUID", UUID, "Строка", Параметры);

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_ПолучитьПреалерт(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["entity"]["shipment_point"]).Заполнено();
    ОжидаетЧто(Результат["requests"]).ИмеетТип("Массив").Заполнено();

    Статус = Результат["requests"][0]["state"];

    ОжидаетЧто(Статус = "ACCEPTED" Или Статус = "SUCCESSFUL").Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_ПолучитьСтатусПаспортныхДанных(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["orders"][0]["passport"][0]["client"]).Равно("SENDER");
    ОжидаетЧто(Результат["orders"][0]["passport"][1]["client"]).Равно("RECEIVER");

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_ПолучитьЧекЗаказа(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_ПолучитьЧекиНаДату(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_ПолучитьРеестрыПлатежейНаДату(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_ПолучитьПереводыПлатежейНаДату(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_ПолучитьОписаниеФильтраОфисов(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_ПолучитьСписокОфисов(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_CDEK_ПолучитьСписокРегионов(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_YandexMetrika_ПолучитьСписокМеток(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["labels"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_YandexMetrika_СоздатьМетку(Знач Результат, Знач Вариант, Параметры = "", Наименование = "")

    ОжидаетЧто(Результат["label"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["label"]["id"]).Заполнено();

    Если ЗначениеЗаполнено(Наименование) Тогда
        ОжидаетЧто(Результат["label"]["name"]).Равно(Наименование);
    КонецЕсли;

    IDМетки = Результат["label"]["id"];
    ЗаписатьПараметр("Metrika_LabelID", IDМетки);
    OPI_Инструменты.ДобавитьПоле("Metrika_LabelID", IDМетки, "Строка", Параметры);

    Возврат Результат;

КонецФункции

Функция Проверка_YandexMetrika_УдалитьМетку(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["success"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_YandexMetrika_ИзменитьМетку(Знач Результат, Знач Вариант, Наименование = "")

    ОжидаетЧто(Результат["label"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["label"]["id"]).Заполнено();

    Если ЗначениеЗаполнено(Наименование) Тогда
        ОжидаетЧто(Результат["label"]["name"]).Равно(Наименование);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_YandexMetrika_ПолучитьМетку(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["label"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["label"]["id"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_YandexMetrika_ПолучитьСтруктуруСчетчика(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_YandexMetrika_СоздатьСчетчик(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["counter"]).ИмеетТип("Соответствие").Заполнено();

    IDСчетчика = Результат["counter"]["id"];
    ЗаписатьПараметр("Metrika_CounterID", IDСчетчика);
    OPI_Инструменты.ДобавитьПоле("Metrika_CounterID", IDСчетчика, "Строка", Параметры);

    Возврат Результат;

КонецФункции

Функция Проверка_YandexMetrika_УдалитьСчетчик(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["success"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_YandexMetrika_ИзменитьСчетчик(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["counter"]).ИмеетТип("Соответствие").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_YandexMetrika_ПолучитьСчетчик(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["counter"]).ИмеетТип("Соответствие").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_YandexMetrika_ВосстановитьСчетчик(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["success"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_YandexMetrika_ПолучитьСписокСчетчиков(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["counters"]).ИмеетТип("Массив").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_YandexMetrika_ПолучитьСписокОпераций(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["operations"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_S3_ПолучитьСтруктуруДанных(Знач Результат, Знач Вариант)

    Результат["SecretKey"] = "***";

    Возврат Результат;

КонецФункции

Функция Проверка_S3_ОтправитьЗапросБезТела(Знач Результат, Знач Вариант)

    Возврат Неопределено;

КонецФункции

Функция Проверка_S3_ОтправитьЗапросСТелом(Знач Результат, Знач Вариант)

    Возврат Неопределено;

КонецФункции

Функция Проверка_S3_СоздатьБакет(Знач Результат, Знач Вариант)

    Если Не ЗначениеЗаполнено(Вариант) Тогда
        Успех = Результат["status"] >= 200 И Результат["status"] < 300;
        ОжидаетЧто(Успех).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_S3_УдалитьБакет(Знач Результат, Знач Вариант)

    Успех = Результат["status"] >= 200 И Результат["status"] < 300;
    ОжидаетЧто(Успех).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_S3_ПолучитьСписокБакетов(Знач Результат, Знач Вариант)

    Успех = Результат["status"] >= 200 И Результат["status"] < 300;
    ОжидаетЧто(Успех).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_S3_ПроверитьДоступностьБакета(Знач Результат, Знач Вариант)

    Успех = Результат["status"] >= 200 И Результат["status"] < 300;
    ОжидаетЧто(Успех).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_S3_ПолучитьШифрованиеБакета(Знач Результат, Знач Вариант)

    Возврат Неопределено;

КонецФункции

Функция Проверка_S3_УдалитьШифрованиеБакета(Знач Результат, Знач Вариант)

    Успех = Результат["status"] >= 200 И Результат["status"] < 300;
    ОжидаетЧто(Успех).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_S3_УстановитьШифрованиеБакета(Знач Результат, Знач Вариант)

    Успех = Результат["status"] = 501;
    ОжидаетЧто(Успех).Равно(Истина);

    Возврат Неопределено;

КонецФункции

Функция Проверка_S3_ПолучитьТегиБакета(Знач Результат, Знач Вариант)

    Успех = Результат["status"] >= 200 И Результат["status"] < 300;
    ОжидаетЧто(Успех).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_S3_УстановитьТегиБакета(Знач Результат, Знач Вариант)

    Успех = Результат["status"] >= 200 И Результат["status"] < 300;
    ОжидаетЧто(Успех).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_S3_УдалитьТегиБакета(Знач Результат, Знач Вариант)

    Успех = Результат["status"] >= 200 И Результат["status"] < 300;
    ОжидаетЧто(Успех).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_S3_ПолучитьНастройкиВерсионированияБакета(Знач Результат, Знач Вариант)

    Успех = Результат["status"] >= 200 И Результат["status"] < 300;
    ОжидаетЧто(Успех).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_S3_УстановитьНастройкиВерсионированияБакета(Знач Результат, Знач Вариант)

    Успех = Результат["status"] >= 200 И Результат["status"] < 300;
    ОжидаетЧто(Успех).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_S3_ЗагрузитьОбъект(Знач Результат, Знач Вариант)

    Успех = Результат["status"] >= 200 И Результат["status"] < 300;
    ОжидаетЧто(Успех).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_S3_ЗагрузитьОбъектЦеликом(Знач Результат, Знач Вариант)

    Успех = Результат["status"] >= 200 И Результат["status"] < 300;
    ОжидаетЧто(Успех).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_S3_УдалитьОбъект(Знач Результат, Знач Вариант)

    Успех = Результат["status"] >= 200 И Результат["status"] < 300;
    ОжидаетЧто(Успех).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_S3_ПолучитьОписаниеОбъекта(Знач Результат, Знач Вариант)

    Успех = Результат["status"] >= 200 И Результат["status"] < 300;
    ОжидаетЧто(Успех).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_S3_КопироватьОбъект(Знач Результат, Знач Вариант)

    Успех = Результат["status"] >= 200 И Результат["status"] < 300;
    ОжидаетЧто(Успех).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_S3_УстановитьТегиОбъекта(Знач Результат, Знач Вариант)

    Успех = Результат["status"] >= 200 И Результат["status"] < 300;
    ОжидаетЧто(Успех).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_S3_ПолучитьТегиОбъекта(Знач Результат, Знач Вариант)

    Успех = Результат["status"] >= 200 И Результат["status"] < 300;
    ОжидаетЧто(Успех).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_S3_УдалитьТегиОбъекта(Знач Результат, Знач Вариант)

    Успех = Результат["status"] >= 200 И Результат["status"] < 300;
    ОжидаетЧто(Успех).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_S3_ПолучитьСписокОбъектов(Знач Результат, Знач Вариант)

    Успех = Результат["status"] >= 200 И Результат["status"] < 300;
    ОжидаетЧто(Успех).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_S3_ПолучитьСписокВерсийОбъектов(Знач Результат, Знач Вариант)

    Успех = Результат["status"] >= 200 И Результат["status"] < 300;
    ОжидаетЧто(Успех).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_S3_ПолучитьОбъект(Знач Результат, Знач Вариант, Размер = "")

    Если Вариант = "Файл" Или Вариант = "Большой файл" Тогда

        Если Не ТипЗнч(Результат) = Тип("ДвоичныеДанные") Тогда

            Результат = Новый Файл(Результат);
            ОжидаетЧто(Результат).ИмеетТип("Файл");
            ОжидаетЧто(Результат.Существует()).Равно(Истина);

        КонецЕсли;

    Иначе
        ОжидаетЧто(Результат).ИмеетТип("ДвоичныеДанные");
    КонецЕсли;

    ОжидаетЧто(Результат.Размер() >= Размер).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_S3_ИнициализироватьЗагрузкуЧастями(Знач Результат, Знач Вариант)

    Успех = Результат["status"] >= 200 И Результат["status"] < 300;
    ОжидаетЧто(Успех).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_S3_ЗавершитьЗагрузкуЧастями(Знач Результат, Знач Вариант)

    Успех = Результат["status"] >= 200 И Результат["status"] < 300;
    ОжидаетЧто(Успех).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_S3_ЗагрузитьЧастьОбъекта(Знач Результат, Знач Вариант)

    Успех = Результат["status"] >= 200 И Результат["status"] < 300;
    ОжидаетЧто(Успех).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_S3_ОтменитьЗагрузкуЧастями(Знач Результат, Знач Вариант)

    Успех = Результат["status"] >= 200 И Результат["status"] < 300;
    ОжидаетЧто(Успех).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_S3_ПолучитьСсылкуСкачиванияОбъекта(Знач Результат, Знач Вариант, Размер = "")

    Если Не ЗначениеЗаполнено(Вариант) Тогда
        ОжидаетЧто(Результат).ИмеетТип("Строка");
    Иначе
        ОжидаетЧто(Результат).ИмеетТип("ДвоичныеДанные");
        ОжидаетЧто(Результат.Размер() >= Размер).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_S3_ПолучитьСсылкуЗагрузкиОбъекта(Знач Результат, Знач Вариант, Размер = "")

    Если Не ЗначениеЗаполнено(Вариант) Тогда
        ОжидаетЧто(Результат).ИмеетТип("Строка");
    ИначеЕсли Вариант = "Проверка" Тогда
        ОжидаетЧто(Число(Результат["headers"]["Content-Length"])).Равно(Размер);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_TCP_ЗакрытьСоединение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_TCP_ОткрытьСоединение(Знач Результат, Знач Вариант)

    Результат = Строка(ТипЗнч(Результат));

    ОжидаетЧто(Результат).Равно("AddIn.OPI_TCPClient.Main");

    Возврат Результат;

КонецФункции

Функция Проверка_TCP_ПрочитатьДвоичныеДанные(Знач Результат, Знач Вариант, Сообщение = "")

    Результат = ПолучитьСтрокуИзДвоичныхДанных(Результат);

    ОжидаетЧто(Результат).Равно(Сообщение);

    Возврат Результат;

КонецФункции

Функция Проверка_TCP_ОтправитьДвоичныеДанные(Знач Результат, Знач Вариант, Сообщение = "")

    Результат = ПолучитьСтрокуИзДвоичныхДанных(Результат);

    ОжидаетЧто(Результат).Равно(Сообщение);

    Возврат Результат;

КонецФункции

Функция Проверка_TCP_ОбработатьЗапрос(Знач Результат, Знач Вариант, Сообщение = "")

    ОжидаетЧто(Результат).Равно(Сообщение);

    Возврат Результат;

КонецФункции

Функция Проверка_TCP_ПрочитатьСтроку(Знач Результат, Знач Вариант, Сообщение = "")

    ОжидаетЧто(Результат).Равно(Сообщение);

    Возврат Результат;

КонецФункции

Функция Проверка_TCP_ОтправитьСтроку(Знач Результат, Знач Вариант, Сообщение = "")

    ОжидаетЧто(Результат).Равно(Сообщение);

    Возврат Результат;

КонецФункции

Функция Проверка_TCP_ПолучитьНастройкиTls(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_TCP_ПолучитьПоследнююОшибку(Знач Результат, Знач Вариант)

    Возврат Результат;

КонецФункции

Функция Проверка_TCP_ПолучитьНастройкиПрокси(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Результат["password"] = "***";

    Возврат Результат;

КонецФункции

Функция Проверка_TCP_ЗапуститьСервер(Знач Результат, Знач Вариант)

    Результат = Строка(ТипЗнч(Результат));

    ОжидаетЧто(Результат).Равно("AddIn.OPI_TCPServer.Main");

    Возврат Результат;

КонецФункции

Функция Проверка_TCP_ОстановитьСервер(Знач Результат, Знач Вариант)

    Если Вариант = "Список" Тогда
        // После остановки сервера попытка получить список должна вернуть ошибку
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
        ОжидаетЧто(ЗначениеЗаполнено(Результат["error"])).Равно(Истина);
    ИначеЕсли Вариант = "Подключение" Тогда
        // Попытка подключения к остановленному серверу должна вернуть ошибку
        ОжидаетЧто(ТипЗнч(Результат)).Равно(Тип("Соответствие"));
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_TCP_ПолучитьДанныеОчередногоСоединения(Знач Результат, Знач Вариант, Сообщение = "")

    Если Вариант = "Закрытое" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
        ОжидаетЧто(Результат["error"]).Равно("timeout");
    Иначе

        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(ЗначениеЗаполнено(Результат["connectionId"])).Равно(Истина);

        Данные = Результат["message"];
        Данные = ПолучитьСтрокуИзДвоичныхДанных(Данные);

        ОжидаетЧто(Данные).Равно(Сообщение);

        Результат["message"] = "<ДвоичныеДанные>";

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_TCP_ПолучитьДанныеСоединения(Знач Результат, Знач Вариант, Сообщение = "")

    Если Вариант = "Пустое" Или Вариант = "Закрытое" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
    Иначе

        ОжидаетЧто(Результат["result"]).Равно(Истина);

        Если Вариант = "ПустойСписок" Тогда
            ОжидаетЧто(Результат["connections"].Количество()).Равно(0);
        Иначе

            Данные = Результат["message"];
            Данные = ПолучитьСтрокуИзДвоичныхДанных(Данные);

            ОжидаетЧто(Данные).Равно(Сообщение);

            Результат["message"] = "<ДвоичныеДанные>";

        КонецЕсли;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_TCP_ОтправитьДанные(Знач Результат, Знач Вариант, Сообщение = "")

    Если Вариант = "Проверка" Тогда
        ОжидаетЧто(Результат).Равно(Сообщение);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_TCP_ЗакрытьВходящееСоединение(Знач Результат, Знач Вариант)

    Если Вариант = "ПустойСписок" Тогда

        ОжидаетЧто(Результат["connections"].Количество()).Равно(0);

    ИначеЕсли Вариант = "ОтправкаВЗакрытое" Тогда

        ОжидаетЧто(Результат).Равно(Ложь);

    Иначе

        ОжидаетЧто(Результат["result"]).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_TCP_ЗавершитьОтправку(Знач Результат, Знач Вариант)

    Если Вариант = "ОтправкаСервер" Тогда

        ОжидаетЧто(Результат["error"]).Равно("Write half is closed");

    ИначеЕсли Вариант = "ОтправкаКлиент" Тогда

        ОжидаетЧто(Результат).Равно(Истина);

    Иначе

        ОжидаетЧто(Результат["result"]).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_TCP_ЗавершитьПолучение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_TCP_ПолучитьСписокСоединений(Знач Результат, Знач Вариант)

    Если Вариант = "Закрытые" Или ЭтоТестCLI() Тогда
        ОжидаетЧто(Результат["connections"].Количество()).Равно(1);
    Иначе
        ОжидаетЧто(Результат["connections"].Количество()).Равно(2);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_TCP_ПолучитьЛог(Знач Результат, Знач Вариант, ФайлЛога = "")

    Если СтрНайти(Вариант, "КакСтрока") > 0 Тогда

        ОжидаетЧто(ТипЗнч(Результат)).Равно(Тип("Строка"));
        ОжидаетЧто(СтрДлина(Результат) > 0).Равно(Истина);

    Иначе

        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["logs"]).ИмеетТип("Массив");
        ОжидаетЧто(Результат["logs"].Количество() > 0).Равно(Истина);

    КонецЕсли;

    ОбъектЛога = Новый Файл(ФайлЛога);
    ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
    ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_TCP_ПолучитьНастройкиЛогирования(Знач Результат, Знач Вариант)

    Если Вариант = "Файл" Тогда

        ОжидаетЧто(Результат["mode"]).Равно("file");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["file_path"])).Равно(Истина);

    ИначеЕсли Вариант = "Память" Тогда

        ОжидаетЧто(Результат["mode"]).Равно("memory");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["max_entries"])).Равно(Истина);

    Иначе

        ОжидаетЧто(Результат["mode"]).Равно("both");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["file_path"])).Равно(Истина);
        ОжидаетЧто(ЗначениеЗаполнено(Результат["max_entries"])).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_TCP_ЭтоОбъектСервера(Знач Результат, Знач Вариант)

    Если Вариант = "Ложь" Тогда
        ОжидаетЧто(Результат).Равно(Ложь);
    Иначе
        ОжидаетЧто(Результат).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_TCP_Расширенная_ПолучитьДанныеОчередногоТаймаут(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(Результат["error"]).Равно("timeout");

    Возврат Результат;

КонецФункции

Функция Проверка_TCP_Расширенная_ОперацияБезЗапуска(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(СтрНайти(нРег(Результат["error"]), "not started") > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_TCP_Расширенная_ПолучитьЛогПриЗапускеСервера(Знач Результат, Знач Вариант, ФайлЛога = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["logs"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["logs"].Количество() > 0).Равно(Истина);

    ОбъектЛога = Новый Файл(ФайлЛога);
    ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
    ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_TCP_Расширенная_ПрочитатьТаймаут(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_TCP_Расширенная_ОперацияБезПодключения(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(СтрНайти(нРег(Результат["error"]), "no connection") > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_TCP_Расширенная_ОбменJanxКоллекцией(Знач Результат, Знач Вариант, Восстановленное = Неопределено, ИсходноеЗначение = Неопределено)

    ОжидаетЧто(ТипЗнч(Результат)).Равно(Тип("ДвоичныеДанные"));
    ПроверитьКартуJanx(Восстановленное, ИсходноеЗначение);

    Возврат Результат;

КонецФункции

Функция Проверка_TCP_Расширенная_ПолучитьЛогПриОткрытииСоединения(Знач Результат, Знач Вариант, ФайлЛога = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["logs"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["logs"].Количество() > 0).Равно(Истина);

    ОбъектЛога = Новый Файл(ФайлЛога);
    ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
    ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_WebSocket_ОткрытьСоединение(Знач Результат, Знач Вариант)

    Результат = Строка(ТипЗнч(Результат));
    ОжидаетЧто(Результат).Равно("AddIn.OPI_WSClient.Main");

    Возврат Результат;

КонецФункции

Функция Проверка_WebSocket_ЗакрытьСоединение(Знач Результат, Знач Вариант)

    Если Лев(Вариант, 8) = "Открытие" Тогда
        Результат = Строка(ТипЗнч(Результат));
        ОжидаетЧто(Результат).Равно("AddIn.OPI_WSClient.Main");
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_WebSocket_ОтправитьПинг(Знач Результат, Знач Вариант)

    Если Лев(Вариант, 8) = "Проверка" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["type"]).Равно("pong");
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_WebSocket_ОтправитьПонг(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_WebSocket_ПолучитьСообщение(Знач Результат, Знач Вариант, Сообщение = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если СтрНайти(Вариант, "Отправка") = 0 Тогда
        ОжидаетЧто(Результат["type"]).Равно("text");
        ОжидаетЧто(Результат["data"]["payload"]).Равно(Сообщение);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_WebSocket_ОтправитьТекстовоеСообщение(Знач Результат, Знач Вариант, Сообщение = "")

    Если Лев(Вариант, 8) = "Проверка" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["type"]).Равно("text");
        ОжидаетЧто(Результат["data"]["payload"]).Равно(Сообщение);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_WebSocket_ОтправитьДвоичноеСообщение(Знач Результат, Знач Вариант, Сообщение = "")

    Если Лев(Вариант, 8) = "Проверка" Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["type"]).Равно("binary");

        Данные = ПолучитьСтрокуИзДвоичныхДанных(Результат["data"]);
        ОжидаетЧто(Данные).Равно(Сообщение);

        Результат["data"] = "<ДвоичныеДанные>";

    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_WebSocket_ПолучитьНастройкиTls(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_WebSocket_ПолучитьНастройкиПрокси(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    ОжидаетЧто(OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "server")).Равно(Истина);
    ОжидаетЧто(OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "port")).Равно(Истина);
    ОжидаетЧто(OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "proxy_type")).Равно(Истина);

    ОжидаетЧто(ЗначениеЗаполнено(Результат["server"])).Равно(Истина);
    ОжидаетЧто(ТипЗнч(Результат["port"]) = Тип("Число")).Равно(Истина);
    ОжидаетЧто(ЗначениеЗаполнено(Результат["proxy_type"])).Равно(Истина);

    ОжидаетЧто(OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "login")).Равно(Истина);
    ОжидаетЧто(OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "password")).Равно(Истина);
    ОжидаетЧто(ЗначениеЗаполнено(Результат["login"])).Равно(Истина);
    ОжидаетЧто(ЗначениеЗаполнено(Результат["password"])).Равно(Истина);

    Результат["password"] = "***";

    Возврат Результат;

КонецФункции

Функция Проверка_WebSocket_ЭтоОбъектКлиента(Знач Результат, Знач Вариант)

    Если СтрНайти(Вариант, "Ложь") > 0 Тогда
        ОжидаетЧто(Результат).Равно(Ложь);
    Иначе
        ОжидаетЧто(Результат).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_WebSocket_ЗапуститьСервер(Знач Результат, Знач Вариант)

    Результат = Строка(ТипЗнч(Результат));
    ОжидаетЧто(Результат).Равно("AddIn.OPI_WSServer.Main");

    Возврат Результат;

КонецФункции

Функция Проверка_WebSocket_ОстановитьСервер(Знач Результат, Знач Вариант)

    Если Вариант = "Список" Тогда

        ОжидаетЧто(Результат["result"]).Равно(Ложь);

    ИначеЕсли Вариант = "Подключение" Тогда

        ОжидаетЧто(Строка(ТипЗнч(Результат)) = "AddIn.OPI_WSClient.Main").Равно(Ложь);

    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_WebSocket_ПолучитьДанныеОчередногоСоединения(Знач Результат, Знач Вариант, Сообщение = "")

    Если Вариант = "Закрытое" Тогда

        ОжидаетЧто(Результат["result"]).Равно(Ложь);

    Иначе

        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(ЗначениеЗаполнено(Результат["connectionId"])).Равно(Истина);

        СообщениеОтвета = Результат["message"];

        Если ТипЗнч(СообщениеОтвета) = Тип("ДвоичныеДанные") Тогда

            СообщениеОтвета = ПолучитьСтрокуИзДвоичныхДанных(СообщениеОтвета);

            Результат["message"] = "<Двоичные данные>";

        ИначеЕсли OPI_Инструменты.ЭтоКоллекция(СообщениеОтвета, Истина) Тогда

            СообщениеОтвета = OPI_Инструменты.ПолучитьИли(СообщениеОтвета, "payload", "");

            Если ТипЗнч(СообщениеОтвета) = Тип("ДвоичныеДанные") Тогда
                СообщениеОтвета["payload"] = "<Двоичные данные>";
            КонецЕсли;

        КонецЕсли;

        ОжидаетЧто(СообщениеОтвета).Равно(Сообщение);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_WebSocket_ПолучитьДанныеСоединения(Знач Результат, Знач Вариант, Сообщение = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если Вариант = "ПустойСписок" Тогда

        ОжидаетЧто(Результат["connections"]).ИмеетТип("Массив").ИмеетДлину(0);

    Иначе

        Если Вариант = "Закрытое" Тогда
            ОжидаетЧто(Результат["isActive"]).Равно(Ложь);
        Иначе
            ОжидаетЧто(Результат["isActive"]).Равно(Истина);
        КонецЕсли;

        СообщениеОтвета = Результат["message"];

        Если ТипЗнч(СообщениеОтвета) = Тип("ДвоичныеДанные") Тогда

            СообщениеОтвета      = ПолучитьСтрокуИзДвоичныхДанных(СообщениеОтвета);
            Результат["message"] = "<Двоичные данные>";

        ИначеЕсли OPI_Инструменты.ЭтоКоллекция(СообщениеОтвета, Истина) Тогда

            СообщениеОтвета = OPI_Инструменты.ПолучитьИли(СообщениеОтвета, "payload", "");

            Если ТипЗнч(СообщениеОтвета) = Тип("ДвоичныеДанные") Тогда
                СообщениеОтвета["payload"] = "<Двоичные данные>";
            КонецЕсли;

        КонецЕсли;

        ОжидаетЧто(СообщениеОтвета).Равно(Сообщение);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_WebSocket_ОтправитьДанные(Знач Результат, Знач Вариант, Сообщение = "")

    Если Вариант = "Проверка" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["type"]).Равно("binary");
        ОжидаетЧто(ПолучитьСтрокуИзДвоичныхДанных(Результат["data"])).Равно(Сообщение);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_WebSocket_ЗакрытьВходящееСоединение(Знач Результат, Знач Вариант)

    Если Вариант = "ПустойСписок" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["connections"]).ИмеетТип("Массив").ИмеетДлину(0);
    ИначеЕсли Вариант = "ОтправкаВЗакрытое" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_WebSocket_ПолучитьСписокСоединений(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["connections"].Количество() > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_WebSocket_ЭтоОбъектСервера(Знач Результат, Знач Вариант)

    Если Вариант = "Ложь" Тогда
        ОжидаетЧто(Результат).Равно(Ложь);
    Иначе
        ОжидаетЧто(Результат).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_WebSocket_Расширенная_ПолучитьДанныеОчередногоТаймаут(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(Результат["error"]).Равно("timeout");

    Возврат Результат;

КонецФункции

Функция Проверка_WebSocket_Расширенная_ОперацияБезЗапуска(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(СтрНайти(нРег(Результат["error"]), "not started") > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_WebSocket_Расширенная_ПолучитьЛогПриЗапускеСервера(Знач Результат, Знач Вариант, ФайлЛога = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["logs"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["logs"].Количество() > 0).Равно(Истина);

    ОбъектЛога = Новый Файл(ФайлЛога);
    ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
    ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_WebSocket_ПолучитьЛог(Знач Результат, Знач Вариант, ФайлЛога = "")

    Если Вариант = "КакСтрока" Тогда

        ОжидаетЧто(ТипЗнч(Результат)).Равно(Тип("Строка"));
        ОжидаетЧто(СтрДлина(Результат) > 0).Равно(Истина);

        ОбъектЛога = Новый Файл(ФайлЛога);
        ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
        ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    Иначе

        ОжидаетЧто(Результат["result"]).Равно(Истина);

        ОжидаетЧто(Результат["logs"]).ИмеетТип("Массив");
        ОжидаетЧто(Результат["logs"].Количество() > 0).Равно(Истина);

        ОбъектЛога = Новый Файл(ФайлЛога);
        ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
        ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_WebSocket_ПолучитьНастройкиЛогирования(Знач Результат, Знач Вариант)

    Если Вариант = "Файл" Тогда

        ОжидаетЧто(Результат["mode"]).Равно("file");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["file_path"])).Равно(Истина);

    ИначеЕсли Вариант = "Память" Тогда

        ОжидаетЧто(Результат["mode"]).Равно("memory");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["max_entries"])).Равно(Истина);

    Иначе

        ОжидаетЧто(Результат["mode"]).Равно("both");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["file_path"])).Равно(Истина);
        ОжидаетЧто(ЗначениеЗаполнено(Результат["max_entries"])).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_ZeroMQ_ПолучитьЛог(Знач Результат, Знач Вариант, ФайлЛога = "")

    Если Вариант = "КакСтрока" Тогда

        ОжидаетЧто(ТипЗнч(Результат)).Равно(Тип("Строка"));
        ОжидаетЧто(СтрДлина(Результат) > 0).Равно(Истина);

        ОбъектЛога = Новый Файл(ФайлЛога);
        ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
        ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    Иначе

        ОжидаетЧто(Результат["result"]).Равно(Истина);

        ОжидаетЧто(Результат["logs"]).ИмеетТип("Массив");
        ОжидаетЧто(Результат["logs"].Количество() > 0).Равно(Истина);

        ОбъектЛога = Новый Файл(ФайлЛога);
        ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
        ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_ZeroMQ_ПолучитьНастройкиЛогирования(Знач Результат, Знач Вариант)

    Если Вариант = "Файл" Тогда

        ОжидаетЧто(Результат["mode"]).Равно("file");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["file_path"])).Равно(Истина);

    ИначеЕсли Вариант = "Память" Тогда

        ОжидаетЧто(Результат["mode"]).Равно("memory");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["max_entries"])).Равно(Истина);

    Иначе

        ОжидаетЧто(Результат["mode"]).Равно("both");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["file_path"])).Равно(Истина);
        ОжидаетЧто(ЗначениеЗаполнено(Результат["max_entries"])).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_ZeroMQ_СоздатьСоединениеReq(Знач Результат, Знач Вариант, Сообщение = "")

    Если Вариант = "Проверка" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Истина);
        Данные            = ПолучитьСтрокуИзДвоичныхДанных(Результат["data"]);
        ОжидаетЧто(Данные).Равно(Сообщение);
        Результат["data"] = "<ДвоичныеДанные>";
    Иначе
        Результат         = Строка(ТипЗнч(Результат));
        ОжидаетЧто(Результат).Равно("AddIn.OPI_ZeroMQ.Main");
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_ZeroMQ_СоздатьСоединениеSub(Знач Результат, Знач Вариант, Сообщение = "")

    Если Вариант = "Проверка" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Истина);
        Данные            = ПолучитьСтрокуИзДвоичныхДанных(Результат["data"]);
        ОжидаетЧто(Данные).Равно(Сообщение);
        Результат["data"] = "<ДвоичныеДанные>";
    Иначе
        Результат         = Строка(ТипЗнч(Результат));
        ОжидаетЧто(Результат).Равно("AddIn.OPI_ZeroMQ.Main");
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_ZeroMQ_СоздатьСоединениеPush(Знач Результат, Знач Вариант, Сообщение = "")

    Если Вариант = "Проверка" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Истина);
        Данные            = ПолучитьСтрокуИзДвоичныхДанных(Результат["data"]);
        ОжидаетЧто(Данные).Равно(Сообщение);
        Результат["data"] = "<ДвоичныеДанные>";
    Иначе
        Результат         = Строка(ТипЗнч(Результат));
        ОжидаетЧто(Результат).Равно("AddIn.OPI_ZeroMQ.Main");
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_ZeroMQ_СоздатьСоединениеPull(Знач Результат, Знач Вариант, Сообщение = "")

    Если Вариант = "Проверка" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Истина);
        Данные            = ПолучитьСтрокуИзДвоичныхДанных(Результат["data"]);
        ОжидаетЧто(Данные).Равно(Сообщение);
        Результат["data"] = "<ДвоичныеДанные>";
    Иначе
        Результат         = Строка(ТипЗнч(Результат));
        ОжидаетЧто(Результат).Равно("AddIn.OPI_ZeroMQ.Main");
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_ZeroMQ_ОткрытьПортRep(Знач Результат, Знач Вариант, Сообщение = "")

    Если Вариант = "Проверка" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Истина);
        Данные            = ПолучитьСтрокуИзДвоичныхДанных(Результат["data"]);
        ОжидаетЧто(Данные).Равно(Сообщение);
        Результат["data"] = "<ДвоичныеДанные>";
    Иначе
        Результат         = Строка(ТипЗнч(Результат));
        ОжидаетЧто(Результат).Равно("AddIn.OPI_ZeroMQ.Main");
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_ZeroMQ_ОткрытьПортPub(Знач Результат, Знач Вариант, Сообщение = "")

    Если Вариант = "Проверка" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Истина);
        Данные            = ПолучитьСтрокуИзДвоичныхДанных(Результат["data"]);
        ОжидаетЧто(Данные).Равно(Сообщение);
        Результат["data"] = "<ДвоичныеДанные>";
    Иначе
        Результат         = Строка(ТипЗнч(Результат));
        ОжидаетЧто(Результат).Равно("AddIn.OPI_ZeroMQ.Main");
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_ZeroMQ_ОткрытьПортPush(Знач Результат, Знач Вариант, Сообщение = "")

    Если Вариант = "Проверка" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Истина);
        Данные            = ПолучитьСтрокуИзДвоичныхДанных(Результат["data"]);
        ОжидаетЧто(Данные).Равно(Сообщение);
        Результат["data"] = "<ДвоичныеДанные>";
    Иначе
        Результат         = Строка(ТипЗнч(Результат));
        ОжидаетЧто(Результат).Равно("AddIn.OPI_ZeroMQ.Main");
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_ZeroMQ_ОткрытьПортPull(Знач Результат, Знач Вариант, Сообщение = "")

    Если Вариант = "Проверка" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Истина);
        Данные            = ПолучитьСтрокуИзДвоичныхДанных(Результат["data"]);
        ОжидаетЧто(Данные).Равно(Сообщение);
        Результат["data"] = "<ДвоичныеДанные>";
    Иначе
        Результат         = Строка(ТипЗнч(Результат));
        ОжидаетЧто(Результат).Равно("AddIn.OPI_ZeroMQ.Main");
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_ZeroMQ_ОтправитьДанные(Знач Результат, Знач Вариант, Сообщение = "")

    Если Вариант = "Проверка" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Истина);
        Данные            = ПолучитьСтрокуИзДвоичныхДанных(Результат["data"]);
        ОжидаетЧто(Данные).Равно(Сообщение);
        Результат["data"] = "<ДвоичныеДанные>";
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_ZeroMQ_ПолучитьДанные(Знач Результат, Знач Вариант, Сообщение = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    Данные            = ПолучитьСтрокуИзДвоичныхДанных(Результат["data"]);
    ОжидаетЧто(Данные).Равно(Сообщение);
    Результат["data"] = "<ДвоичныеДанные>";

    Возврат Результат;

КонецФункции

Функция Проверка_ZeroMQ_Расширенная_ПолучитьДанныеТаймаут(Знач Результат, Знач Вариант)

    ТекстОшибки = нРег(Результат["error"]);
    ЭтоТаймаут  = СтрНайти(ТекстОшибки, "timeout") > 0
        Или СтрНайти(ТекстОшибки, "timed out") > 0;

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(ЭтоТаймаут).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_ZeroMQ_Расширенная_ОбработатьЗапросТаймаут(Знач Результат, Знач Вариант)

    ТекстОшибки = нРег(Результат["error"]);
    ЭтоТаймаут  = СтрНайти(ТекстОшибки, "timeout") > 0
        Или СтрНайти(ТекстОшибки, "timed out") > 0;

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(ЭтоТаймаут).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_ZeroMQ_Расширенная_ОбменJanxКоллекцией(Знач Результат, Знач Вариант, Восстановленное = Неопределено, ИсходноеЗначение = Неопределено, ОтправленныеДвоичные = Неопределено)

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ПроверитьДвоичныеДанныеJanx(Результат["data"], ОтправленныеДвоичные);
    ПроверитьКартуJanx(Восстановленное, ИсходноеЗначение);
    Результат["data"] = "<ДвоичныеДанные>";

    Возврат Результат;

КонецФункции

Функция Проверка_ZeroMQ_Расширенная_ПолучитьЛогПриОткрытииПорта(Знач Результат, Знач Вариант, ФайлЛога = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    ОжидаетЧто(Результат["logs"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["logs"].Количество() > 0).Равно(Истина);

    ОбъектЛога = Новый Файл(ФайлЛога);
    ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
    ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_ZeroMQ_ОбработатьЗапрос(Знач Результат, Знач Вариант, Сообщение = "")

    Если Вариант = "ТаймаутПолучения" Тогда

        ОжидаетЧто(Результат["result"]).Равно(Ложь);
        ОжидаетЧто(СтрНайти(нРег(Результат["error"]), "timeout") > 0).Равно(Истина);

    ИначеЕсли Вариант = "Ответ" Или Не ЗначениеЗаполнено(Вариант) Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);

        Данные            = ПолучитьСтрокуИзДвоичныхДанных(Результат["data"]);
        ОжидаетЧто(Данные).Равно(Сообщение);
        Результат["data"] = "<ДвоичныеДанные>";

    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_ZeroMQ_Подписаться(Знач Результат, Знач Вариант, Сообщение = "")

    Если Вариант = "ЧужаяТема" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ИначеЕсли Вариант = "Проверка" Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);
        Данные = ПолучитьСтрокуИзДвоичныхДанных(Результат["data"]);

        ОжидаетЧто(Данные).Равно(Сообщение);
        Результат["data"] = "<ДвоичныеДанные>";

    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_ZeroMQ_ЗакрытьСоединение(Знач Результат, Знач Вариант)

    Если Вариант = "Открытие" Тогда
        Результат = Строка(ТипЗнч(Результат));
        ОжидаетЧто(Результат).Равно("AddIn.OPI_ZeroMQ.Main");
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_ZeroMQ_ЭтоОбъектКоннектора(Знач Результат, Знач Вариант)

    Если Вариант = "Ложь" Тогда
        ОжидаетЧто(Результат).Равно(Ложь);
    Иначе
        ОжидаетЧто(Результат).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SQLite_ОткрытьСоединение(Знач Результат, Знач Вариант)

    Если Вариант = "Закрытие" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    Иначе
        Результат = Строка(ТипЗнч(Результат));
        ОжидаетЧто(Результат).Равно("AddIn.OPI_SQLite.Main");
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SQLite_ЗакрытьСоединение(Знач Результат, Знач Вариант)

    Если Вариант = "Открытие" Тогда
        Результат = Строка(ТипЗнч(Результат));
        ОжидаетЧто(Результат).Равно("AddIn.OPI_SQLite.Main");
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SQLite_ВыполнитьЗапросSQL(Знач Результат, Знач Вариант, Картинка = "")

    Если Не ЗначениеЗаполнено(Вариант) Тогда

        Blob = Результат["data"][0]["data"];

        Результат["data"][0]["data"] = "Binary";
        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Blob.Размер()).Равно(Картинка.Размер());

    ИначеЕсли Вариант = "Открытие" Тогда

        Результат = Строка(ТипЗнч(Результат));
        ОжидаетЧто(Результат).Равно("AddIn.OPI_SQLite.Main");

    ИначеЕсли Вариант = "Расширение" Тогда

        СистемнаяИнформация = Новый СистемнаяИнформация;

        Если СтрНайти(Строка(СистемнаяИнформация.ТипПлатформы), "64") <> 0 Тогда
            ОжидаетЧто(Результат["data"]).ИмеетТип("Массив").ИмеетДлину(1);
        Иначе
            Возврат Неопределено;
        КонецЕсли;

    КонецЕсли;

    Если Не Вариант = "Открытие" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SQLite_ЭтоКоннектор(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_SQLite_СоздатьТаблицу(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_SQLite_ДобавитьЗаписи(Знач Результат, Знач Вариант)

    Если Вариант = "Ошибка поля" Или Вариант = "Ошибка JSON" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ИначеЕсли Вариант = "Ошибка без транзакции" Тогда
        ОжидаетЧто(Результат["rows"] = 1 Или Результат["rows"] = 2).Равно(Истина);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SQLite_ПолучитьЗаписи(Знач Результат, Знач Вариант)

    Если Вариант = "Ошибка" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SQLite_ОбновитьЗаписи(Знач Результат, Знач Вариант, СтруктураПолей = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если Вариант = "Проверка" Тогда

        Проверка = Результат["data"][0];

        Для Каждого Значение Из СтруктураПолей Цикл
            Проверка[Значение.Ключ] = Значение.Значение;
        КонецЦикла;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SQLite_УдалитьЗаписи(Знач Результат, Знач Вариант)

    Если Вариант = "Проверка" Тогда
        ОжидаетЧто(Результат["data"].Количество()).Равно(0);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SQLite_ПолучитьИнформациюОТаблице(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_SQLite_ПолучитьСтруктуруФильтраЗаписей(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Если Вариант = "Пустая" Тогда

        Для Каждого Элемент Из Результат Цикл

            Если OPI_Инструменты.ЭтоПримитивныйТип(Элемент.Значение) Тогда
                ОжидаетЧто(ЗначениеЗаполнено(Элемент.Значение)).Равно(Ложь);
            КонецЕсли;

        КонецЦикла;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SQLite_УдалитьТаблицу(Знач Результат, Знач Вариант)

    Если Вариант = "Проверка" Тогда
        ОжидаетЧто(Результат["data"].Количество()).Равно(0);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SQLite_ОчиститьТаблицу(Знач Результат, Знач Вариант)

    Если Вариант = "Проверка" Тогда

        ОжидаетЧто(Результат["data"].Количество()).Равно(0);

    ИначеЕсли Вариант = "Таблица" Тогда

        ОжидаетЧто(Результат["data"].Количество()).Равно(5);

    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SQLite_ПолучитьНастройкиЛогирования(Знач Результат, Знач Вариант)

    Если Вариант = "Файл" Тогда

        ОжидаетЧто(Результат["mode"]).Равно("file");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["file_path"])).Равно(Истина);

    ИначеЕсли Вариант = "Память" Тогда

        ОжидаетЧто(Результат["mode"]).Равно("memory");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["max_entries"])).Равно(Истина);

    Иначе

        ОжидаетЧто(Результат["mode"]).Равно("both");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["file_path"])).Равно(Истина);
        ОжидаетЧто(ЗначениеЗаполнено(Результат["max_entries"])).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SQLite_Расширенная_ВыполнитьЗапросБезПодключения(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(СтрНайти(нРег(Результат["error"]), "not connected") > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_SQLite_Расширенная_ПовторноеПодключение(Знач Результат, Знач Вариант)

    ТекстОшибки = нРег(Результат["error"]);
    ЭтоПовтор   = СтрНайти(ТекстОшибки, "already") > 0
        Или СтрНайти(ТекстОшибки, "initialized") > 0;

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(ЭтоПовтор).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_SQLite_Расширенная_ЗапросСДвумяBlob(Знач Результат, Знач Вариант, ИсходноеЗначение = Неопределено)

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["data"].Количество()).Равно(1);

    Строка = Результат["data"][0];
    ПроверитьДвоичныеДанныеJanx(Строка["alpha"], ИсходноеЗначение["alpha"]);
    ПроверитьДвоичныеДанныеJanx(Строка["beta"], ИсходноеЗначение["beta"]);
    ПроверитьДвоичныеДанныеJanx(Строка["inner_blob"], ИсходноеЗначение["nested"]["inner"]);

    Результат["data"][0]["alpha"] = "Binary";
    Результат["data"][0]["beta"] = "Binary";
    Результат["data"][0]["inner_blob"] = "Binary";

    Возврат Результат;

КонецФункции

Функция Проверка_SQLite_Расширенная_ПолучитьЛогПриПодключении(Знач Результат, Знач Вариант, ФайлЛога = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["logs"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["logs"].Количество() > 0).Равно(Истина);

    ОбъектЛога = Новый Файл(ФайлЛога);
    ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
    ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_SQLite_ПолучитьЛог(Знач Результат, Знач Вариант, ФайлЛога = "")

    Если Вариант = "КакСтрока" Тогда

        ОжидаетЧто(ТипЗнч(Результат)).Равно(Тип("Строка"));
        ОжидаетЧто(СтрДлина(Результат) > 0).Равно(Истина);

        ОбъектЛога = Новый Файл(ФайлЛога);
        ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
        ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    Иначе

        ОжидаетЧто(Результат["result"]).Равно(Истина);

        ОжидаетЧто(Результат["logs"]).ИмеетТип("Массив");
        ОжидаетЧто(Результат["logs"].Количество() > 0).Равно(Истина);

        ОбъектЛога = Новый Файл(ФайлЛога);
        ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
        ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SQLite_ПодключитьРасширение(Знач Результат, Знач Вариант)

    СистемнаяИнформация = Новый СистемнаяИнформация;

    Если СтрНайти(Строка(СистемнаяИнформация.ТипПлатформы), "64") <> 0 Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);

        Если Вариант = "Проверка" Тогда
            ОжидаетЧто(Результат["data"].Количество()).Равно(1);
        КонецЕсли;

    Иначе
        Возврат Неопределено;
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SQLite_ДобавитьКолонкуТаблицы(Знач Результат, Знач Вариант)

    Если Вариант = "Проверка" Тогда

        Найдена = Ложь;

        Для Каждого Колонка Из Результат["data"] Цикл

            Если Колонка["name"] = "new_col" Тогда

                ОжидаетЧто(Колонка["type"]).Равно("TEXT");
                Найдена = Истина;

            КонецЕсли;

        КонецЦикла;

        ОжидаетЧто(Найдена).Равно(Истина);

    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SQLite_УдалитьКолонкуТаблицы(Знач Результат, Знач Вариант)

    Если Вариант = "Проверка" Тогда

        Найдена = Ложь;

        Для Каждого Колонка Из Результат["data"] Цикл

            Если Колонка["name"] = "new_col" Тогда

                Найдена = Истина;

            КонецЕсли;

        КонецЦикла;

        ОжидаетЧто(Найдена).Равно(Ложь);

    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SQLite_ГарантироватьТаблицу(Знач Результат, Знач Вариант, СтруктураКолонок = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если Не ЗначениеЗаполнено(Вариант) Или Вариант = "Новая" Тогда

        ОжидаетЧто(Результат["commit"]["result"]).Равно(Истина);

    Иначе

        ОжидаетЧто(Результат["data"].Количество()).Равно(СтруктураКолонок.Количество());

        Для Каждого Колонка Из Результат["data"] Цикл
            ОжидаетЧто(Колонка["type"]).Равно(СтруктураКолонок[Колонка["name"]]);
        КонецЦикла;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SQLite_ГарантироватьЗаписи(Знач Результат, Знач Вариант)

    Если Вариант = "Вставка" Или Вариант = "Обновление" Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);

    ИначеЕсли Вариант = "Проверка вставки" Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["data"].Количество()).Равно(2);

    ИначеЕсли Вариант = "Проверка обновления" Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["data"].Количество()).Равно(3);

        Найдена = Ложь;

        Для Каждого Запись Из Результат["data"] Цикл
            Если Запись["id"] = 1 Тогда
                ОжидаетЧто(Запись["name"]).Равно("Vitaly Updated");
                ОжидаетЧто(Запись["salary"]).Равно(1500.50);
                Найдена = Истина;
            КонецЕсли;
        КонецЦикла;

        ОжидаетЧто(Найдена).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_PostgreSQL_Расширенная_ВыполнитьЗапросБезПодключения(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(СтрНайти(нРег(Результат["error"]), "not connected") > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_PostgreSQL_Расширенная_ПодключениеБезСтроки(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(СтрНайти(нРег(Результат["error"]), "empty connection") > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_PostgreSQL_Расширенная_ПовторноеПодключение(Знач Результат, Знач Вариант)

    ТекстОшибки = нРег(Результат["error"]);
    ЭтоПовтор   = СтрНайти(ТекстОшибки, "already") > 0
        Или СтрНайти(ТекстОшибки, "initialized") > 0
        Или СтрНайти(ТекстОшибки, "connected") > 0;

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(ЭтоПовтор).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_PostgreSQL_Расширенная_ПолучитьЛогПриПодключении(Знач Результат, Знач Вариант, ФайлЛога = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["logs"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["logs"].Количество() > 0).Равно(Истина);

    ОбъектЛога = Новый Файл(ФайлЛога);
    ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
    ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_PostgreSQL_СформироватьСтрокуПодключения(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Строка").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_PostgreSQL_ОткрытьСоединение(Знач Результат, Знач Вариант)

    Результат = Строка(ТипЗнч(Результат));
    ОжидаетЧто(Результат).Равно("AddIn.OPI_PostgreSQL.Main");

    Возврат Результат;

КонецФункции

Функция Проверка_PostgreSQL_ЗакрытьСоединение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_PostgreSQL_ЭтоКоннектор(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_PostgreSQL_ВыполнитьЗапросSQL(Знач Результат, Знач Вариант, Картинка = "")

    Если Вариант = "Соединение" Тогда

        Результат = Строка(ТипЗнч(Результат));
        ОжидаетЧто(Результат).Равно("AddIn.OPI_PostgreSQL.Main");

    ИначеЕсли ЗначениеЗаполнено(Вариант) Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);

    Иначе

        Blob = Результат["data"][0]["data"];

        Результат["data"][0]["data"] = "Binary";
        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Blob.Размер()).Равно(Картинка.Размер());

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_PostgreSQL_СоздатьБазуДанных(Знач Результат, Знач Вариант)

    Если Вариант = "Открытие" Тогда

        Результат = Строка(ТипЗнч(Результат));
        ОжидаетЧто(Результат).Равно("AddIn.OPI_PostgreSQL.Main");

    ИначеЕсли Вариант = "Существующая" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_PostgreSQL_СоздатьТаблицу(Знач Результат, Знач Вариант)

    Если Не ЗначениеЗаполнено(Вариант) Тогда
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_PostgreSQL_ПолучитьИнформациюОТаблице(Знач Результат, Знач Вариант)

    Если Не ЗначениеЗаполнено(Вариант) Тогда
        ОжидаетЧто(Результат["data"].Количество()).Равно(26);
    Иначе
        ОжидаетЧто(Результат["data"].Количество()).Равно(0);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_PostgreSQL_ДобавитьЗаписи(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_PostgreSQL_ПолучитьЗаписи(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если Не ЗначениеЗаполнено(Вариант) Тогда

        Если ЗначениеЗаполнено(Результат["data"]) Тогда
            Результат["data"][0]["bytea_field"] = "Binary";
        КонецЕсли;

    Иначе
        ОжидаетЧто(Результат["data"].Количество()).Равно(5);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_PostgreSQL_ОбновитьЗаписи(Знач Результат, Знач Вариант, Количество = "", СтруктураПолей = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если Вариант = "Проверка" Тогда

        ОжидаетЧто(Результат["data"].Количество()).Равно(Количество);

        Для Н = 0 По Результат["data"].ВГраница() Цикл

            Для Каждого Значение Из СтруктураПолей Цикл
                Результат["data"][Н][Значение.Ключ] = Значение.Значение;
            КонецЦикла;

        КонецЦикла;
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_PostgreSQL_УдалитьЗаписи(Знач Результат, Знач Вариант, Количество = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если Вариант = "Проверка" Тогда
        ОжидаетЧто(Результат["data"].Количество()).Равно(Количество);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_PostgreSQL_УдалитьТаблицу(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_PostgreSQL_УдалитьБазуДанных(Знач Результат, Знач Вариант)

    Если Вариант = "Открытие" Тогда

        Результат = Строка(ТипЗнч(Результат));
        ОжидаетЧто(Результат).Равно("AddIn.OPI_PostgreSQL.Main");

    ИначеЕсли Вариант = "Ошибка" Или Вариант = "Ошибка подключения" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_PostgreSQL_ОчиститьТаблицу(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если Вариант = "Проверка" Тогда
        ОжидаетЧто(Результат["data"].Количество()).Равно(0);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_PostgreSQL_ОтключитьВсеСоединенияБазыДанных(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_PostgreSQL_ПолучитьСтруктуруФильтраЗаписей(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Если Вариант = "Пустая" Тогда

        Для Каждого Элемент Из Результат Цикл

            Если OPI_Инструменты.ЭтоПримитивныйТип(Элемент.Значение) Тогда
                ОжидаетЧто(ЗначениеЗаполнено(Элемент.Значение)).Равно(Ложь);
            КонецЕсли;

        КонецЦикла;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_PostgreSQL_ПолучитьНастройкиTLS(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_PostgreSQL_ПолучитьНастройкиЛогирования(Знач Результат, Знач Вариант)

    Если Вариант = "Файл" Тогда

        ОжидаетЧто(Результат["mode"]).Равно("file");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["file_path"])).Равно(Истина);

    ИначеЕсли Вариант = "Память" Тогда

        ОжидаетЧто(Результат["mode"]).Равно("memory");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["max_entries"])).Равно(Истина);

    Иначе

        ОжидаетЧто(Результат["mode"]).Равно("both");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["file_path"])).Равно(Истина);
        ОжидаетЧто(ЗначениеЗаполнено(Результат["max_entries"])).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_PostgreSQL_ПолучитьЛог(Знач Результат, Знач Вариант, ФайлЛога = "")

    Если Вариант = "КакСтрока" Тогда

        ОжидаетЧто(ТипЗнч(Результат)).Равно(Тип("Строка"));
        ОжидаетЧто(СтрДлина(Результат) > 0).Равно(Истина);

        ОбъектЛога = Новый Файл(ФайлЛога);
        ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
        ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    Иначе

        ОжидаетЧто(Результат["result"]).Равно(Истина);

        ОжидаетЧто(Результат["logs"]).ИмеетТип("Массив");
        ОжидаетЧто(Результат["logs"].Количество() > 0).Равно(Истина);

        ОбъектЛога = Новый Файл(ФайлЛога);
        ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
        ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_PostgreSQL_ДобавитьКолонкуТаблицы(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если Вариант = "Проверка" Тогда

        Найдена = Ложь;

        Для Каждого Колонка Из Результат["data"] Цикл

            Если Колонка["column_name"] = "new_field" Тогда
                ОжидаетЧто(нРег(Колонка["data_type"])).Равно("text");
                Найдена = Истина;
            КонецЕсли;

        КонецЦикла;

        ОжидаетЧто(Найдена).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_PostgreSQL_УдалитьКолонкуТаблицы(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если Вариант = "Проверка" Тогда

        Найдена = Ложь;

        Для Каждого Колонка Из Результат["data"] Цикл

            Если Колонка["column_name"] = "new_field" Тогда
                Найдена = Истина;
            КонецЕсли;

        КонецЦикла;

        ОжидаетЧто(Найдена).Равно(Ложь);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_PostgreSQL_ГарантироватьТаблицу(Знач Результат, Знач Вариант, СтруктураКолонок = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если Вариант = "Проверка" Тогда

        ОжидаетЧто(Результат["data"].Количество()).Равно(СтруктураКолонок.Количество());

        Для Каждого Колонка Из Результат["data"] Цикл
            ОжидаетЧто(нРег(Колонка["data_type"])).Равно(нРег(СтруктураКолонок[Колонка["column_name"]]));
        КонецЦикла;

    Иначе
        ОжидаетЧто(Результат["commit"]["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_PostgreSQL_ГарантироватьЗаписи(Знач Результат, Знач Вариант)

    Если Вариант = "Вставка" Или Вариант = "Обновление" Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);

    ИначеЕсли Вариант = "Проверка вставки" Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["data"].Количество()).Равно(2);

    ИначеЕсли Вариант = "Проверка обновления" Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["data"].Количество()).Равно(3);

        Найдена = Ложь;

        Для Каждого Запись Из Результат["data"] Цикл
            Если Запись["id"] = 1 Тогда
                ОжидаетЧто(Запись["name"]).Равно("Vitaly Updated");
                ОжидаетЧто(Запись["salary"]).Равно(1500.50);
                Найдена = Истина;
            КонецЕсли;
        КонецЦикла;

        ОжидаетЧто(Найдена).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MySQL_Расширенная_ВыполнитьЗапросБезПодключения(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(СтрНайти(нРег(Результат["error"]), "not connected") > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MySQL_Расширенная_ПодключениеБезСтроки(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(СтрНайти(нРег(Результат["error"]), "empty connection") > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MySQL_Расширенная_ПовторноеПодключение(Знач Результат, Знач Вариант)

    ТекстОшибки = нРег(Результат["error"]);
    ЭтоПовтор   = СтрНайти(ТекстОшибки, "already") > 0
        Или СтрНайти(ТекстОшибки, "initialized") > 0
        Или СтрНайти(ТекстОшибки, "connected") > 0;

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(ЭтоПовтор).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MySQL_Расширенная_ПолучитьЛогПриПодключении(Знач Результат, Знач Вариант, ФайлЛога = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["logs"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["logs"].Количество() > 0).Равно(Истина);

    ОбъектЛога = Новый Файл(ФайлЛога);
    ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
    ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MySQL_СформироватьСтрокуПодключения(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Строка").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_MySQL_ОткрытьСоединение(Знач Результат, Знач Вариант)

    Результат = Строка(ТипЗнч(Результат));
    ОжидаетЧто(Результат).Равно("AddIn.OPI_MySQL.Main");

    Возврат Результат;

КонецФункции

Функция Проверка_MySQL_ЗакрытьСоединение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MySQL_ЭтоКоннектор(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MySQL_ВыполнитьЗапросSQL(Знач Результат, Знач Вариант, Картинка = "")

    Если Вариант = "Соединение" Тогда

        Результат = Строка(ТипЗнч(Результат));
        ОжидаетЧто(Результат).Равно("AddIn.OPI_MySQL.Main");

    ИначеЕсли ЗначениеЗаполнено(Вариант) Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);

    Иначе

        Blob = Результат["data"][0]["data"];

        Результат["data"][0]["data"] = "Binary";
        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Blob.Размер()).Равно(Картинка.Размер());

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MySQL_СоздатьБазуДанных(Знач Результат, Знач Вариант)

    Если Вариант = "Открытие" Тогда

        Результат = Строка(ТипЗнч(Результат));
        ОжидаетЧто(Результат).Равно("AddIn.OPI_MySQL.Main");

    ИначеЕсли Вариант = "Существующая" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MySQL_СоздатьТаблицу(Знач Результат, Знач Вариант)

    Если Не ЗначениеЗаполнено(Вариант) Тогда
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MySQL_ДобавитьЗаписи(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MySQL_ПолучитьЗаписи(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если Не ЗначениеЗаполнено(Вариант) Тогда

        Если ЗначениеЗаполнено(Результат["data"]) Тогда

            Результат["data"][0]["mediumblob_field"] = "Binary";

        КонецЕсли;

    Иначе
        ОжидаетЧто(Результат["data"].Количество()).Равно(5);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MySQL_ОбновитьЗаписи(Знач Результат, Знач Вариант, Количество = "", СтруктураПолей = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если Вариант = "Проверка" Тогда

        ОжидаетЧто(Результат["data"].Количество()).Равно(Количество);

        Для Н = 0 По Результат["data"].ВГраница() Цикл

            Для Каждого Значение Из СтруктураПолей Цикл
                Результат["data"][Н][Значение.Ключ] = Значение.Значение;
            КонецЦикла;

        КонецЦикла;
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MySQL_УдалитьЗаписи(Знач Результат, Знач Вариант, Количество = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если Вариант = "Проверка" Тогда
        ОжидаетЧто(Результат["data"].Количество()).Равно(Количество);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MySQL_УдалитьТаблицу(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MySQL_УдалитьБазуДанных(Знач Результат, Знач Вариант)

    Если Вариант = "Открытие" Тогда

        Результат = Строка(ТипЗнч(Результат));
        ОжидаетЧто(Результат).Равно("AddIn.OPI_MySQL.Main");

    ИначеЕсли Вариант = "Ошибка" Или Вариант = "Ошибка подключения" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MySQL_ОчиститьТаблицу(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если Вариант = "Проверка" Тогда
        ОжидаетЧто(Результат["data"].Количество()).Равно(0);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MySQL_ПолучитьСтруктуруФильтраЗаписей(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Если Вариант = "Пустая" Тогда

        Для Каждого Элемент Из Результат Цикл

            Если OPI_Инструменты.ЭтоПримитивныйТип(Элемент.Значение) Тогда
                ОжидаетЧто(ЗначениеЗаполнено(Элемент.Значение)).Равно(Ложь);
            КонецЕсли;

        КонецЦикла;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MySQL_ПолучитьНастройкиTLS(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MySQL_ПолучитьНастройкиЛогирования(Знач Результат, Знач Вариант)

    Если Вариант = "Файл" Тогда

        ОжидаетЧто(Результат["mode"]).Равно("file");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["file_path"])).Равно(Истина);

    ИначеЕсли Вариант = "Память" Тогда

        ОжидаетЧто(Результат["mode"]).Равно("memory");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["max_entries"])).Равно(Истина);

    Иначе

        ОжидаетЧто(Результат["mode"]).Равно("both");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["file_path"])).Равно(Истина);
        ОжидаетЧто(ЗначениеЗаполнено(Результат["max_entries"])).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MySQL_ПолучитьЛог(Знач Результат, Знач Вариант, ФайлЛога = "")

    Если Вариант = "КакСтрока" Тогда

        ОжидаетЧто(ТипЗнч(Результат)).Равно(Тип("Строка"));
        ОжидаетЧто(СтрДлина(Результат) > 0).Равно(Истина);

        ОбъектЛога = Новый Файл(ФайлЛога);
        ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
        ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    Иначе

        ОжидаетЧто(Результат["result"]).Равно(Истина);

        ОжидаетЧто(Результат["logs"]).ИмеетТип("Массив");
        ОжидаетЧто(Результат["logs"].Количество() > 0).Равно(Истина);

        ОбъектЛога = Новый Файл(ФайлЛога);
        ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
        ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MySQL_ПолучитьИнформациюОТаблице(Знач Результат, Знач Вариант)

    Если Не ЗначениеЗаполнено(Вариант) Тогда
        ОжидаетЧто(Результат["data"].Количество()).Равно(20);
    Иначе
        ОжидаетЧто(Результат["data"].Количество()).Равно(0);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MySQL_ДобавитьКолонкуТаблицы(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если Вариант = "Проверка" Тогда

        Найдена = Ложь;

        Для Каждого Колонка Из Результат["data"] Цикл

            Если Колонка["COLUMN_NAME"] = "new_field" Тогда

                ТекущийТип = Колонка["DATA_TYPE"];
                ОжидаетЧто(нРег(ТекущийТип)).Равно("mediumtext");
                Найдена    = Истина;
            КонецЕсли;

        КонецЦикла;

        ОжидаетЧто(Найдена).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MySQL_УдалитьКолонкуТаблицы(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если Вариант = "Проверка" Тогда

        Найдена = Ложь;

        Для Каждого Колонка Из Результат["data"] Цикл

            Если Колонка["COLUMN_NAME"] = "new_field" Тогда
                Найдена = Истина;
            КонецЕсли;

        КонецЦикла;

        ОжидаетЧто(Найдена).Равно(Ложь);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MySQL_ГарантироватьТаблицу(Знач Результат, Знач Вариант, СтруктураКолонок = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если Вариант = "Проверка" Тогда

        ОжидаетЧто(Результат["data"].Количество()).Равно(СтруктураКолонок.Количество());

        Для Каждого Колонка Из Результат["data"] Цикл
            ТекущийТип = Колонка["DATA_TYPE"];
            ОжидаетЧто(нРег(ТекущийТип)).Равно(нРег(СтруктураКолонок[Колонка["COLUMN_NAME"]]));
        КонецЦикла;

    Иначе
        ОжидаетЧто(Результат["commit"]["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MySQL_ГарантироватьЗаписи(Знач Результат, Знач Вариант)

    Если Вариант = "Вставка" Или Вариант = "Обновление" Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);

    ИначеЕсли Вариант = "Проверка вставки" Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["data"].Количество()).Равно(2);

    ИначеЕсли Вариант = "Проверка обновления" Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["data"].Количество()).Равно(3);

        Найдена = Ложь;

        Для Каждого Запись Из Результат["data"] Цикл
            Если Запись["id"] = 1 Тогда
                ОжидаетЧто(Запись["name"]).Равно("Vitaly Updated");
                ОжидаетЧто(Запись["salary"]).Равно(1500.50);
                Найдена = Истина;
            КонецЕсли;
        КонецЦикла;

        ОжидаетЧто(Найдена).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_СформироватьПараметрыДоступа(Знач Результат, Знач Вариант)

    Результат.Вставить("apiTokenInstance", "***");
    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ПолучитьНастройкиИнстанса(Знач Результат, Знач Вариант, Параметры = "")

    Попытка
        JSON = OPI_Инструменты.JSONСтрокой(Результат);
        JSON = СтрЗаменить(JSON, Параметры["GreenAPI_AccountID"], "1234567890@c.us");

        Результат = OPI_Инструменты.JsonВСтруктуру(JSON, Истина);
    Исключение
        Сообщить("Ошибка JSON");
    КонецПопытки;

    ОжидаетЧто(Результат["proxyInstance"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ПолучитьИнформациюОбАккаунте(Знач Результат, Знач Вариант, Параметры = "")

    Попытка
        Результат["deviceId"] = "***";
        Результат["phone"]    = "***";
    Исключение
        Сообщить("Не удалось заменить секреты!");
    КонецПопытки;

    ОжидаетЧто(Результат["deviceId"]).Заполнено();
    ОжидаетЧто(Результат["phone"]).Заполнено();

    IDЧата = Результат["chatId"];
    ЗаписатьПараметр("GreenAPI_ChatID", IDЧата);
    OPI_Инструменты.ДобавитьПоле("GreenAPI_ChatID", IDЧата, "Строка", Параметры);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ПолучитьСтруктуруНастроекИнстанса(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Если Вариант = "Пустая" Тогда

        Для Каждого Элемент Из Результат Цикл

            Если OPI_Инструменты.ЭтоПримитивныйТип(Элемент.Значение) Тогда
                ОжидаетЧто(ЗначениеЗаполнено(Элемент.Значение)).Равно(Ложь);
            КонецЕсли;

        КонецЦикла;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_УстановитьНастройкиИнстанса(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["saveSettings"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ПолучитьСостояниеИнстанса(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["stateInstance"]).Равно("authorized");

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ПерезапуститьИнстанс(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["isReboot"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ПолучитьQR(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("ДвоичныеДанные");
    ОжидаетЧто(Результат.Размер() >= 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_РазлогинитьИнстанс(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["isLogout"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ПолучитьКодАвторизации(Знач Результат, Знач Вариант)

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_УстановитьКартинкуПрофиля(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["setProfilePicture"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_СоздатьГруппу(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["created"]).Равно(Истина);
    ОжидаетЧто(Результат["chatId"]).Заполнено();

    IDГруппы = Результат["chatId"];
    ЗаписатьПараметр("GreenAPI_GroupID", IDГруппы);
    OPI_Инструменты.ДобавитьПоле("GreenAPI_GroupID", IDГруппы, "Строка", Параметры);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ПокинутьГруппу(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["removeAdmin"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ПолучитьИнформациюОГруппе(Знач Результат, Знач Вариант)

    Попытка
        Результат["owner"]                 = "***";
        Результат["participants"][0]["id"] = "***";
    Исключение
        Сообщить("Не удалось заменить секреты!");
    КонецПопытки;

    ОжидаетЧто(Результат["groupId"]).Заполнено();
    ОжидаетЧто(Результат["owner"]).Заполнено();
    ОжидаетЧто(Результат["creation"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ИзменитьИмяГруппы(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["updateGroupName"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ДобавитьУчастникаВГруппу(Знач Результат, Знач Вариант)

    Попытка
        Результат["addParticipant"] = Истина;
    Исключение
        Сообщить("Не удалось заменить секреты!");
    КонецПопытки;

    ОжидаетЧто(Результат["addParticipant"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ИсключитьУчастникаГруппы(Знач Результат, Знач Вариант)

    Попытка
        Результат["removeParticipant"] = Истина;
    Исключение
        Сообщить("Не удалось заменить секреты!");
    КонецПопытки;

    ОжидаетЧто(Результат["removeParticipant"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_НазначитьПраваАдминистратора(Знач Результат, Знач Вариант)

    Попытка
        Результат["setGroupAdmin"] = Истина;
    Исключение
        Сообщить("Не удалось заменить секреты!");
    КонецПопытки;

    ОжидаетЧто(Результат["setGroupAdmin"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ОтозватьПраваАдминистратора(Знач Результат, Знач Вариант)

    Попытка
        Результат["removeAdmin"] = Истина;
    Исключение
        Сообщить("Не удалось заменить секреты!");
    КонецПопытки;

    ОжидаетЧто(Результат["removeAdmin"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_УстановитьКартинкуГруппы(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["setGroupPicture"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ОтправитьТекстовоеСообщение(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["idMessage"]).Заполнено();

    Если Не ЗначениеЗаполнено(Вариант) Тогда

        IDСообщения = Результат["idMessage"];
        ЗаписатьПараметр("GreenAPI_MessageID", IDСообщения);
        OPI_Инструменты.ДобавитьПоле("GreenAPI_MessageID", IDСообщения, "Строка", Параметры);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_УдалитьСообщение(Знач Результат, Знач Вариант)

    Если Не нРег(Строка(Результат)) = "null" Тогда
        ОжидаетЧто(ЗначениеЗаполнено(Результат)).Равно(Ложь);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ИзменитьТекстСообщения(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["idMessage"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ОтправитьФайл(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["idMessage"]).Заполнено();
    ОжидаетЧто(Результат["urlFile"]).Заполнено();

    Если Не ЗначениеЗаполнено(Вариант) Тогда
        IDСообщения = Результат["idMessage"];
        ЗаписатьПараметр("GreenAPI_FileMessageID", IDСообщения);
        OPI_Инструменты.ДобавитьПоле("GreenAPI_FileMessageID", IDСообщения, "Строка", Параметры);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ОтправитьФайлПоURL(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["idMessage"]).Заполнено();

    Если Не ЗначениеЗаполнено(Вариант) Тогда
        IDСообщения = Результат["idMessage"];
        ЗаписатьПараметр("GreenAPI_FileMessageID", IDСообщения);
        OPI_Инструменты.ДобавитьПоле("GreenAPI_FileMessageID", IDСообщения, "Строка", Параметры);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ОтправитьОпрос(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["idMessage"]).Заполнено();

    Если Не ЗначениеЗаполнено(Вариант) Тогда
        IDСообщения = Результат["idMessage"];
        ЗаписатьПараметр("GreenAPI_PollMessageID", IDСообщения);
        OPI_Инструменты.ДобавитьПоле("GreenAPI_PollMessageID", IDСообщения, "Строка", Параметры);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ПолучитьОписаниеЛокации(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ОтправитьЛокацию(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["idMessage"]).Заполнено();

    Если Не ЗначениеЗаполнено(Вариант) Тогда
        IDСообщения = Результат["idMessage"];
        ЗаписатьПараметр("GreenAPI_LocMessageID", IDСообщения);
        OPI_Инструменты.ДобавитьПоле("GreenAPI_LocMessageID", IDСообщения, "Строка", Параметры);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ПолучитьОписаниеКонтакта(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ОтправитьКонтакт(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["idMessage"]).Заполнено();

    Если Не ЗначениеЗаполнено(Вариант) Тогда
        IDСообщения = Результат["idMessage"];
        ЗаписатьПараметр("GreenAPI_ContactMessageID", IDСообщения);
        OPI_Инструменты.ДобавитьПоле("GreenAPI_ContactMessageID", IDСообщения, "Строка", Параметры);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ПереслатьСообщения(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["messages"]).ИмеетТип("Массив").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ПолучитьУведомление(Знач Результат, Знач Вариант, Параметры = "")

    Попытка
        JSON = OPI_Инструменты.JSONСтрокой(Результат);
        JSON = СтрЗаменить(JSON, Параметры["GreenAPI_AccountID"], "1234567890@c.us");

        Результат = OPI_Инструменты.JsonВСтруктуру(JSON, Истина);
    Исключение
        Сообщить("Ошибка JSON");
    КонецПопытки;

    Результат = OPI_Инструменты.JsonВСтруктуру(JSON, Истина);

    ОжидаетЧто(Результат["receiptId"]).Заполнено();

    IDУведомления = Результат["receiptId"];
    ЗаписатьПараметр("GreenAPI_ReceiptID", IDУведомления);
    OPI_Инструменты.ДобавитьПоле("GreenAPI_ReceiptID", IDУведомления, "Строка", Параметры);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_УдалитьУведомлениеИзОчереди(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_СкачатьФайлСообщения(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["downloadUrl"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_УстановитьОтметкуПрочтения(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["setRead"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ПолучитьОчередьСообщений(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ОчиститьОчередьСообщений(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["isCleared"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ПолучитьИсториюЧата(Знач Результат, Знач Вариант, Параметры = "")

    Попытка
        JSON = OPI_Инструменты.JSONСтрокой(Результат);
        JSON = СтрЗаменить(JSON, Параметры["GreenAPI_AccountID"], "1234567890@c.us");

        Результат = OPI_Инструменты.JsonВСтруктуру(JSON, Истина);
    Исключение
        Сообщить("Ошибка JSON");
    КонецПопытки;

    ОжидаетЧто(Результат).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ПолучитьСообщение(Знач Результат, Знач Вариант, Параметры = "")

    Попытка
        JSON = OPI_Инструменты.JSONСтрокой(Результат);
        JSON = СтрЗаменить(JSON, Параметры["GreenAPI_AccountID"], "1234567890@c.us");

        Результат = OPI_Инструменты.JsonВСтруктуру(JSON, Истина);
    Исключение
        Сообщить("Ошибка JSON");
    КонецПопытки;

    ОжидаетЧто(Результат["idMessage"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ПолучитьЖурналВходящихСообщений(Знач Результат, Знач Вариант, Параметры = "")

    Попытка
        JSON = OPI_Инструменты.JSONСтрокой(Результат);
        JSON = СтрЗаменить(JSON, Параметры["GreenAPI_AccountID"], "1234567890@c.us");

        Результат = OPI_Инструменты.JsonВСтруктуру(JSON, Истина);
    Исключение
        Сообщить("Ошибка JSON");
    КонецПопытки;

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_ПолучитьЖурналИсходящихСообщений(Знач Результат, Знач Вариант, Параметры = "")

    Попытка
        JSON = OPI_Инструменты.JSONСтрокой(Результат);
        JSON = СтрЗаменить(JSON, Параметры["GreenAPI_AccountID"], "1234567890@c.us");

        Результат = OPI_Инструменты.JsonВСтруктуру(JSON, Истина);
    Исключение
        Сообщить("Ошибка JSON");
    КонецПопытки;

    ОжидаетЧто(Результат).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_GreenAPI_АрхивироватьЧат(Знач Результат, Знач Вариант)

    // !DISABLED! ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Неопределено;

КонецФункции

Функция Проверка_GreenAPI_РазархивироватьЧат(Знач Результат, Знач Вариант)

    Если Не ЗначениеЗаполнено(Вариант) Тогда
        ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_RCON_Расширенная_ВыполнитьКомандуБезПодключения(Знач Результат, Знач Вариант)

    ТекстОшибки = нРег(Результат["error"]);
    ЭтоОшибка   = СтрНайти(ТекстОшибки, "no client") > 0
        Или СтрНайти(ТекстОшибки, "initialize connection") > 0;

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(ЭтоОшибка).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_RCON_Расширенная_ПовторноеПодключение(Знач Результат, Знач Вариант)

    ТекстОшибки = нРег(Результат["error"]);
    ЭтоПовтор   = СтрНайти(ТекстОшибки, "already") > 0
        Или СтрНайти(ТекстОшибки, "initialized") > 0;

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(ЭтоПовтор).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_RCON_Расширенная_ПолучитьЛогПриПодключении(Знач Результат, Знач Вариант, ФайлЛога = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["logs"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["logs"].Количество() > 0).Равно(Истина);

    ОбъектЛога = Новый Файл(ФайлЛога);
    ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
    ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_RCON_СформироватьПараметрыСоединения(Знач Результат, Знач Вариант)

    Результат["url"]      = "127.0.0.1:25565";
    Результат["password"] = "***";

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_RCON_ОткрытьСоединение(Знач Результат, Знач Вариант)

    Результат = Строка(ТипЗнч(Результат));
    ОжидаетЧто(Результат).Равно("AddIn.OPI_RCON.Main");

    Возврат Результат;

КонецФункции

Функция Проверка_RCON_ВыполнитьКоманду(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_RCON_ЭтоКоннектор(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_RCON_ПолучитьНастройкиЛогирования(Знач Результат, Знач Вариант)

    Если Вариант = "Файл" Тогда

        ОжидаетЧто(Результат["mode"]).Равно("file");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["file_path"])).Равно(Истина);

    ИначеЕсли Вариант = "Память" Тогда

        ОжидаетЧто(Результат["mode"]).Равно("memory");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["max_entries"])).Равно(Истина);

    Иначе

        ОжидаетЧто(Результат["mode"]).Равно("both");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["file_path"])).Равно(Истина);
        ОжидаетЧто(ЗначениеЗаполнено(Результат["max_entries"])).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_RCON_ПолучитьЛог(Знач Результат, Знач Вариант, ФайлЛога = "")

    Если Вариант = "КакСтрока" Тогда

        ОжидаетЧто(ТипЗнч(Результат)).Равно(Тип("Строка"));
        ОжидаетЧто(СтрДлина(Результат) > 0).Равно(Истина);

        ОбъектЛога = Новый Файл(ФайлЛога);
        ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
        ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    Иначе

        ОжидаетЧто(Результат["result"]).Равно(Истина);

        ОжидаетЧто(Результат["logs"]).ИмеетТип("Массив");
        ОжидаетЧто(Результат["logs"].Количество() > 0).Равно(Истина);

        ОбъектЛога = Новый Файл(ФайлЛога);
        ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
        ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_Ollama_ПолучитьОтвет(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["model"]).Заполнено();
    ОжидаетЧто(Результат["response"]).Заполнено();
    ОжидаетЧто(Результат["done"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Ollama_ПолучитьОтветВКонтексте(Знач Результат, Знач Вариант, Сообщение1 = "", Сообщение2 = "",
    Сообщение3 = "")

    Если Вариант = "Сравнение" Тогда

        ОжидаетЧто(Сообщение1 = Сообщение2).Равно(Истина);
        ОжидаетЧто(Сообщение1 = Сообщение3).Равно(Ложь);

    Иначе
        ОжидаетЧто(Результат["model"]).Заполнено();
        ОжидаетЧто(Результат["message"]).Заполнено();
        ОжидаетЧто(Результат["done"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_Ollama_ЗагрузитьМодельВПамять(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["model"]).Заполнено();
    ОжидаетЧто(Результат["done"]).Равно(Истина);
    ОжидаетЧто(Результат["done_reason"]).Равно("load");

    Возврат Результат;

КонецФункции

Функция Проверка_Ollama_ВыгрузитьМодельИзПамяти(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["model"]).Заполнено();
    ОжидаетЧто(Результат["done"]).Равно(Истина);
    ОжидаетЧто(Результат["done_reason"]).Равно("unload");

    Возврат Результат;

КонецФункции

Функция Проверка_Ollama_ПолучитьСтруктуруПараметровЗапроса(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Если Вариант = "Пустая" Тогда

        Для Каждого Элемент Из Результат Цикл

            Если OPI_Инструменты.ЭтоПримитивныйТип(Элемент.Значение) Тогда
                ОжидаетЧто(ЗначениеЗаполнено(Элемент.Значение)).Равно(Ложь);
            КонецЕсли;

        КонецЦикла;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_Ollama_ПолучитьСтруктуруПараметровВКонтексте(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Если Вариант = "Пустая" Тогда

        Для Каждого Элемент Из Результат Цикл

            Если OPI_Инструменты.ЭтоПримитивныйТип(Элемент.Значение) Тогда
                ОжидаетЧто(ЗначениеЗаполнено(Элемент.Значение)).Равно(Ложь);
            КонецЕсли;

        КонецЦикла;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_Ollama_ПолучитьСтруктуруСообщенияКонтекста(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Ollama_ПолучитьСтруктуруНастроекМодели(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Если Вариант = "Пустая" Тогда

        Для Каждого Элемент Из Результат Цикл

            Если OPI_Инструменты.ЭтоПримитивныйТип(Элемент.Значение) Тогда
                ОжидаетЧто(ЗначениеЗаполнено(Элемент.Значение)).Равно(Ложь);
            КонецЕсли;

        КонецЦикла;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_Ollama_СоздатьМодель(Знач Результат, Знач Вариант)

    Если Вариант = "Запрос" Тогда

        ОжидаетЧто(Результат["model"]).Заполнено();
        ОжидаетЧто(Результат["response"]).Заполнено();
        ОжидаетЧто(Результат["done"]).Равно(Истина);

    Иначе
        ОжидаетЧто(Результат["status"]).Равно("success");
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_Ollama_УдалитьМодель(Знач Результат, Знач Вариант)

    Если Вариант = "Список" Тогда
        ОжидаетЧто(Результат["models"].Количество()).Равно(4);
    ИначеЕсли Не ЗначениеЗаполнено(Вариант) Тогда
        ОжидаетЧто(Результат["status_code"] < 300).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_Ollama_ПолучитьСписокМоделей(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["models"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Ollama_ПолучитьСписокЗапущенныхМоделей(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["models"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_Ollama_ПолучитьИнформациюОМодели(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["parameters"]).Заполнено();
    ОжидаетЧто(Результат["model_info"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Ollama_КопироватьМодель(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["status_code"] < 300).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Ollama_ПолучитьВерсию(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["version"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Ollama_ПолучитьПредставления(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["embeddings"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_Ollama_ПолучитьСтруктуруПараметровПредставлений(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Если Вариант = "Пустая" Тогда

        Для Каждого Элемент Из Результат Цикл

            Если OPI_Инструменты.ЭтоПримитивныйТип(Элемент.Значение) Тогда
                ОжидаетЧто(ЗначениеЗаполнено(Элемент.Значение)).Равно(Ложь);
            КонецЕсли;

        КонецЦикла;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_Ollama_ОтправитьМодель(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["status"]).Равно("success");

    Возврат Результат;

КонецФункции

Функция Проверка_Ollama_СкачатьМодель(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["status"]).Равно("success");

    Возврат Результат;

КонецФункции

Функция Проверка_Ollama_ОтправитьBlob(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["status_code"] < 300).Равно(Истина);

    ЗаписатьПараметр("Ollama_Blob", Результат["digest"]);
    Параметры.Вставить("Ollama_Blob", Результат["digest"]);

    Возврат Результат;

КонецФункции

Функция Проверка_Ollama_ПроверитьBlob(Знач Результат, Знач Вариант, Параметры = "")

    Если Вариант = "Ошибка" Тогда
        ОжидаетЧто(Результат["status_code"] >= 400).Равно(Истина);
    Иначе
        ОжидаетЧто(Результат["status_code"] < 300).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_Инициализировать(Знач Результат, Знач Вариант, Параметры = "")

    Если Не ЗначениеЗаполнено(Вариант) Тогда

        Попытка
            Результат["origin"] = "***";
        Исключение
            Попытка
                ВызватьИсключение Результат.ПолучитьЛог(Истина);
            Исключение
                ВызватьИсключение ПолучитьСтрокуИзДвоичныхДанных(Результат);
            КонецПопытки;
        КонецПопытки;

        ОжидаетЧто(Результат["args"]).ИмеетТип("Соответствие");
        ОжидаетЧто(Результат["args"].Количество()).Равно(0);

    ИначеЕсли Вариант = "Проверка 1" Тогда

        Попытка

            HTTPЗапрос     = Результат.ВернутьЗапрос();
            HTTPСоединение = Результат.ВернутьСоединение();
            HTTPОтвет      = Результат.ВернутьОтвет();

            ОсновнойURL = СтрЗаменить(Параметры["HTTP_URL"], "https://", "");
            ОсновнойURL = СтрЗаменить(ОсновнойURL          , "http://" , "");

            Если СтрНайти(ОсновнойURL, ":") > 0 Тогда
                ОсновнойURL = СтрРазделить(ОсновнойURL, ":")[0];
            КонецЕсли;

            ОжидаетЧто(HTTPЗапрос).ИмеетТип("HTTPЗапрос");
            ОжидаетЧто(HTTPСоединение).ИмеетТип("HTTPСоединение");

            ОжидаетЧто(HTTPЗапрос.АдресРесурса).Равно("/get");
            ОжидаетЧто(HTTPСоединение.Сервер).Равно(ОсновнойURL);

            ОжидаетЧто(HTTPОтвет).Равно(Неопределено);

        Исключение
            ВызватьИсключение ОписаниеОшибки() + Символы.ПС + Символы.ПС + Результат.ПолучитьЛог(Истина);
        КонецПопытки;

    Иначе

        Попытка
            ОжидаетЧто(Результат).ИмеетТип("HTTPЗапрос");
            ОжидаетЧто(Результат.АдресРесурса).Равно("/post");
        Исключение
            ВызватьИсключение ОписаниеОшибки() + Символы.ПС + Символы.ПС + Результат.ПолучитьЛог(Истина);
        КонецПопытки;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_УстановитьURL(Знач Результат, Знач Вариант, Параметры = "")

    Если Не ЗначениеЗаполнено(Вариант) Тогда

        Попытка
            Результат["origin"] = "***";
        Исключение
            Попытка
                ВызватьИсключение Результат.ПолучитьЛог(Истина);
            Исключение
                ВызватьИсключение ПолучитьСтрокуИзДвоичныхДанных(Результат);
            КонецПопытки;
        КонецПопытки;

        ОжидаетЧто(Результат["args"]).ИмеетТип("Соответствие");
        ОжидаетЧто(Результат["args"].Количество()).Равно(0);

    Иначе

        Попытка

            HTTPЗапрос     = Результат.ВернутьЗапрос();
            HTTPСоединение = Результат.ВернутьСоединение();
            HTTPОтвет      = Результат.ВернутьОтвет();
            ОсновнойURL    = СтрЗаменить(Параметры["HTTP_URL"], "https://", "");
            ОсновнойURL    = СтрЗаменить(ОсновнойURL          , "http://" , "");

            Если СтрНайти(ОсновнойURL, ":") > 0 Тогда
                ОсновнойURL = СтрРазделить(ОсновнойURL, ":")[0];
            КонецЕсли;

            ОжидаетЧто(HTTPЗапрос).ИмеетТип("HTTPЗапрос");
            ОжидаетЧто(HTTPСоединение).ИмеетТип("HTTPСоединение");

            ОжидаетЧто(HTTPЗапрос.АдресРесурса).Равно("/get");
            ОжидаетЧто(HTTPСоединение.Сервер).Равно(ОсновнойURL);

            ОжидаетЧто(HTTPОтвет).Равно(Неопределено);

        Исключение
            ВызватьИсключение ОписаниеОшибки() + Символы.ПС + Символы.ПС + Результат.ПолучитьЛог(Истина);
        КонецПопытки;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_УстановитьПараметрыURL(Знач Результат, Знач Вариант, Параметры = "")

    Адрес     = "/get?param1=text&param2=10";

    СоответствиеОтветов = Новый Соответствие;
    СоответствиеОтветов.Вставить("Вариант 1", "/page?param1=search%3Ftext&param2=John" + "%20Doe&param3=value%26another&param4=%D0%BA%D0%B8%D1%80%D0%B8%D0%BB%D0%BB%"
        + "D0%B8%D1%86%D0%B0&param5=%3Cscript%3Ealert%28%27XSS%27%29%3C%2Fscript%3E");

    СоответствиеОтветов.Вставить("Вариант 2", "/page?existing=value&param1=search%3Ftext&param2=John%20Doe");
    СоответствиеОтветов.Вставить("Вариант 3", "/page?param1=search%3Ftext&param2=John%20Doe");
    СоответствиеОтветов.Вставить("Вариант 4", "/path%20with%20spaces?param1=search%3Ftext&param2=John%20Doe");
    СоответствиеОтветов.Вставить("Вариант 5", "/page?param1=search%3Ftext&param2=John%20Doe#section");
    СоответствиеОтветов.Вставить("Вариант 6", "/%D0%BF%D1%83%D1%82%D1%8C?param1=search%3Ftext&param2=John%20Doe");
    СоответствиеОтветов.Вставить("Вариант 7", "/page?param1=value1&param2=value%20two&param3=value%3Cthree%3E");

    Если Не ЗначениеЗаполнено(Вариант) Тогда

        Попытка
            Результат["origin"] = "***";
        Исключение
            Попытка
                ВызватьИсключение Результат.ПолучитьЛог(Истина);
            Исключение
                ВызватьИсключение ПолучитьСтрокуИзДвоичныхДанных(Результат);
            КонецПопытки;
        КонецПопытки;

        ПолныйURL = Параметры["HTTP_URL"] + Адрес;

        ОжидаетЧто(Результат["args"]).ИмеетТип("Соответствие");
        ОжидаетЧто(Результат["args"].Количество()).Равно(2);
        ОжидаетЧто(Результат["url"]).Равно(ПолныйURL);

    ИначеЕсли Вариант = "Проверка" Тогда

        Попытка

            ОжидаетЧто(Результат).ИмеетТип("HTTPЗапрос");
            ОжидаетЧто(Результат.АдресРесурса).Равно(Адрес);

        Исключение
            ВызватьИсключение ОписаниеОшибки() + Символы.ПС + Символы.ПС + Результат.ПолучитьЛог(Истина);
        КонецПопытки;

    Иначе
        ОжидаетЧто(Результат).Равно(СоответствиеОтветов[Вариант]);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_УстановитьФайлОтвета(Знач Результат, Знач Вариант, ИВФ = "")

    ФайлТела = Новый Файл(ИВФ);

    Если Не ЗначениеЗаполнено(Вариант) Тогда

        ФайлТелаВозврат = Новый Файл(Результат);

        ОжидаетЧто(ИВФ).Равно(Результат);
        ОжидаетЧто(ФайлТела.Размер()).Равно(ФайлТелаВозврат.Размер());
        ОжидаетЧто(ФайлТела.Размер() > 0).Равно(Истина);

    Иначе

        ОжидаетЧто(ФайлТела.Размер()).Равно(Результат.Размер());

        РезультатПроверкиСтрокой = ПолучитьСтрокуИзДвоичныхДанных(Результат);

        ОжидаетЧто(OPI_Инструменты.JsonВСтруктуру(РезультатПроверкиСтрокой)).ИмеетТип("Соответствие");

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_УстановитьТипДанных(Знач Результат, Знач Вариант)

    Попытка
        Результат["origin"] = "***";
    Исключение
        Попытка
            ВызватьИсключение Результат.ПолучитьЛог(Истина);
        Исключение
            ВызватьИсключение ПолучитьСтрокуИзДвоичныхДанных(Результат);
        КонецПопытки;
    КонецПопытки;

    ОжидаетЧто(Результат["headers"]["Content-Type"]).Равно("text/markdown");

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_ПолучитьЛог(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Строка");

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_УстановитьДвоичноеТело(Знач Результат, Знач Вариант, Картинка = "")

    Попытка
        Результат["origin"] = "***";
        Результат["data"]   = "...";
    Исключение
        Попытка
            ВызватьИсключение Результат.ПолучитьЛог(Истина);
        Исключение
            ВызватьИсключение ПолучитьСтрокуИзДвоичныхДанных(Результат);
        КонецПопытки;
    КонецПопытки;

    ОжидаетЧто(Результат["headers"]["Content-Type"]).Равно("application/octet-stream");

    OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Картинка);

    Размер = Картинка.Размер();
    OPI_ПреобразованиеТипов.ПолучитьСтроку(Размер);
    ОжидаетЧто(Результат["headers"]["Content-Length"]).Равно(Размер);

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_УстановитьСтроковоеТело(Знач Результат, Знач Вариант)

    Попытка
        Результат["origin"] = "***";
    Исключение
        Попытка
            ВызватьИсключение Результат.ПолучитьЛог(Истина);
        Исключение
            ВызватьИсключение ПолучитьСтрокуИзДвоичныхДанных(Результат);
        КонецПопытки;
    КонецПопытки;

    Текст     = "Привет мир!";
    Кодировка = "Windows-1251";

    ОжидаетЧто(Результат["headers"]["Content-Type"]).Равно("text/plain; charset=" + Кодировка);

    ТекстДД = ПолучитьДвоичныеДанныеИзСтроки(Текст, Кодировка);
    Размер  = ТекстДД.Размер();
    OPI_ПреобразованиеТипов.ПолучитьСтроку(Размер);

    ОжидаетЧто(Результат["headers"]["Content-Length"]).Равно(Размер);

    ТекстB64 = "data:application/octet-stream;base64," + Base64Строка(ТекстДД);

    ОжидаетЧто(Результат["data"] = ТекстB64 Или Результат["data"] = Текст).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_УстановитьJsonТело(Знач Результат, Знач Вариант, JSONОригинал = "")

    Попытка
        Результат["origin"] = "***";
    Исключение
        Попытка
            ВызватьИсключение Результат.ПолучитьЛог(Истина);
        Исключение
            ВызватьИсключение ПолучитьСтрокуИзДвоичныхДанных(Результат);
        КонецПопытки;
    КонецПопытки;

    ОжидаетЧто(Результат["headers"]["Content-Type"]).Равно("application/json; charset=utf-8");

    JSONРезультат = Результат["json"];

    ОжидаетЧто(JSONРезультат["Поле1"]).Равно(JSONОригинал["Поле1"]);
    ОжидаетЧто(JSONРезультат["Поле2"]).Равно(JSONОригинал["Поле2"]);
    ОжидаетЧто(JSONРезультат["Поле3"][0]).Равно(JSONОригинал["Поле3"][0]);
    ОжидаетЧто(JSONРезультат["Поле3"][1]).Равно(JSONОригинал["Поле3"][1]);
    ОжидаетЧто(JSONРезультат["Поле3"][2]).Равно(JSONОригинал["Поле3"][2]);

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_УстановитьFormТело(Знач Результат, Знач Вариант, Данные = "")

    Попытка
        Результат["origin"] = "***";
    Исключение
        Попытка
            ВызватьИсключение Результат.ПолучитьЛог(Истина);
        Исключение
            ВызватьИсключение ПолучитьСтрокуИзДвоичныхДанных(Результат);
        КонецПопытки;
    КонецПопытки;

    ОжидаетЧто(Результат["headers"]["Content-Type"]).Равно("application/x-www-form-urlencoded; charset=utf-8");

    ОжидаетЧто(Результат["form"]["Поле1"]).Равно(Данные["Поле1"]);
    ОжидаетЧто(Результат["form"]["Поле2"]).Равно(Данные["Поле2"]);

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_НачатьЗаписьТелаMultipart(Знач Результат, Знач Вариант, Картинка = "")

    Попытка
        Результат["origin"]         = "***";
        ФайлОтвета                  = Результат["files"]["file1"];
        Результат["files"]["file1"] = "...";
    Исключение
        Попытка
            ВызватьИсключение Результат.ПолучитьЛог(Истина);
        Исключение
            ВызватьИсключение ПолучитьСтрокуИзДвоичныхДанных(Результат);
        КонецПопытки;
    КонецПопытки;

    ОжидаетЧто(СтрНачинаетсяС(Результат["headers"]["Content-Type"], "multipart/")).Равно(Истина);

    OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Картинка);
    ТекстB64 = "data:image/png;base64," + Base64Строка(Картинка);
    ТекстB64 = СтрЗаменить(ТекстB64, Символы.ВК + Символы.ПС, "");

    ОжидаетЧто(Результат["form"]["Поле1"]).Равно("Текст");
    ОжидаетЧто(Результат["form"]["Поле2"]).Равно("10");
    ОжидаетЧто(ФайлОтвета).Равно(ТекстB64);

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_ДобавитьФайлMultipartFormData(Знач Результат, Знач Вариант, Картинка = "")

    Попытка
        Результат["origin"]         = "***";
        ФайлОтвета                  = Результат["files"]["file1"];
        Результат["files"]["file1"] = "...";
    Исключение
        Попытка
            ВызватьИсключение Результат.ПолучитьЛог(Истина);
        Исключение
            ВызватьИсключение ПолучитьСтрокуИзДвоичныхДанных(Результат);
        КонецПопытки;
    КонецПопытки;

    ОжидаетЧто(СтрНачинаетсяС(Результат["headers"]["Content-Type"], "multipart/")).Равно(Истина);

    OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Картинка);
    ТекстB64 = "data:image/png;base64," + Base64Строка(Картинка);
    ТекстB64 = СтрЗаменить(ТекстB64, Символы.ВК + Символы.ПС, "");

    ОжидаетЧто(Результат["form"]["Поле1"]).Равно("Текст");
    ОжидаетЧто(Результат["form"]["Поле2"]).Равно("10");
    ОжидаетЧто(ФайлОтвета).Равно(ТекстB64);

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_ДобавитьПолеMultipartFormData(Знач Результат, Знач Вариант, Картинка = "")

    Попытка
        Результат["origin"]         = "***";
        ФайлОтвета                  = Результат["files"]["file1"];
        Результат["files"]["file1"] = "...";
    Исключение
        Попытка
            ВызватьИсключение Результат.ПолучитьЛог(Истина);
        Исключение
            ВызватьИсключение ПолучитьСтрокуИзДвоичныхДанных(Результат);
        КонецПопытки;
    КонецПопытки;

    ОжидаетЧто(СтрНачинаетсяС(Результат["headers"]["Content-Type"], "multipart/")).Равно(Истина);

    OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Картинка);
    ТекстB64 = "data:image/png;base64," + Base64Строка(Картинка);
    ТекстB64 = СтрЗаменить(ТекстB64, Символы.ВК + Символы.ПС, "");

    ОжидаетЧто(Результат["form"]["Поле1"]).Равно("Текст");
    ОжидаетЧто(Результат["form"]["Поле2"]).Равно("10");
    ОжидаетЧто(ФайлОтвета).Равно(ТекстB64);

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_ДобавитьДанныеRelated(Знач Результат, Знач Вариант)

    Попытка
        Результат["origin"] = "***";
    Исключение
        Попытка
            ВызватьИсключение Результат.ПолучитьЛог(Истина);
        Исключение
            ВызватьИсключение ПолучитьСтрокуИзДвоичныхДанных(Результат);
        КонецПопытки;
    КонецПопытки;

    ОжидаетЧто(СтрНачинаетсяС(Результат["headers"]["Content-Type"], "multipart/")).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_ИспользоватьКодировку(Знач Результат, Знач Вариант)

    Попытка
        Результат["origin"] = "***";
    Исключение
        Попытка
            ВызватьИсключение Результат.ПолучитьЛог(Истина);
        Исключение
            ВызватьИсключение ПолучитьСтрокуИзДвоичныхДанных(Результат);
        КонецПопытки;
    КонецПопытки;

    Кодировка = "Windows-1251";
    ОжидаетЧто(Результат["headers"]["Content-Type"]).Равно("text/plain; charset=" + Кодировка);

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_ИспользоватьСжатиеGzip(Знач Результат, Знач Вариант)

    Если Вариант = "Включено" Тогда
        Сжатие = "gzip";
    Иначе
        Сжатие = Неопределено;
    КонецЕсли;

    ОжидаетЧто(Результат.Заголовки["Accept-Encoding"]).Равно(Сжатие);

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_МаксимумПопыток(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["МаксимумПопыток"]).Равно(10);

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_МаксимумПереадресаций(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["МаксимумПереадресаций"]).Равно(15);

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_ВернутьНастройки(Знач Результат, Знач Вариант)

    Если Вариант = "Одиночный" Тогда

        ОжидаетЧто(Результат).Равно("UTF-8");

    ИначеЕсли Вариант = "Несуществующий" Тогда

        ОжидаетЧто(ЗначениеЗаполнено(Результат)).Равно(Ложь);

    Иначе

        ОжидаетЧто(Результат).ИмеетТип("Структура");

        Если Вариант = "Массив" Тогда

            ОжидаетЧто(Результат.Количество()).Равно(2);
            ОжидаетЧто(ЗначениеЗаполнено(Результат["МаксимумПопыток"])).Равно(Истина);
            ОжидаетЧто(ЗначениеЗаполнено(Результат["МаксимумПереадресаций"])).Равно(Истина);

        КонецЕсли;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_ИспользоватьПоляТелаВOAuth(Знач Результат, Знач Вариант, ЛогСтрокой = "")

    Если Вариант = "Включено" Тогда
        ОжидаетЧто(СтрНайти(Результат, "добавление полей тела в строку для подписи") <> 0).Равно(Истина);
    Иначе

        Попытка
            Результат["origin"]         = "***";
            Результат["files"]["file1"] = "...";
        Исключение

            Попытка
                Лог = Результат.ПолучитьЛог(Истина);
            Исключение
                ВызватьИсключение ПолучитьСтрокуИзДвоичныхДанных(Результат);
            КонецПопытки;

            ВызватьИсключение Лог;

        КонецПопытки;

        ОжидаетЧто(СтрНайти(ЛогСтрокой, "добавление полей тела в строку для подписи")).Равно(0);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_УстановитьЗаголовки(Знач Результат, Знач Вариант)

    Попытка
        Результат["origin"] = "***";
    Исключение
        Попытка
            ВызватьИсключение Результат.ПолучитьЛог(Истина);
        Исключение
            ВызватьИсключение ПолучитьСтрокуИзДвоичныхДанных(Результат);
        КонецПопытки;
    КонецПопытки;

    Если Вариант = "Перезапись" Тогда
        ОжидаетЧто(Результат["headers"]["X-Header1"]).Равно("Value1");
        ОжидаетЧто(Результат["headers"]["X-Header2"]).Равно("Value2");
        ОжидаетЧто(Результат["headers"]["Authorization"]).Равно("Bearer 1111");
    Иначе
        ОжидаетЧто(Результат["headers"]["X-Header1"]).Равно("Value1");
        ОжидаетЧто(Результат["headers"]["X-Header2"]).Равно("Value2");
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_ДобавитьЗаголовок(Знач Результат, Знач Вариант)

    Если Вариант = "Замена" Тогда

        ОжидаетЧто(Результат["headers"]["X-Header1"]).Равно("Value1");
        ОжидаетЧто(Результат["headers"]["X-Header2"]).Равно("Value2");
        ОжидаетЧто(Результат["headers"]["X-Header3"]).Равно(Неопределено);
        ОжидаетЧто(Результат["headers"]["X-Header4"]).Равно(Неопределено);
        ОжидаетЧто(Результат["headers"]["Authorization"]).Равно("Bearer 1111");

    ИначеЕсли Вариант = "Дополнение" Тогда

        ОжидаетЧто(Результат["headers"]["X-Header1"]).Равно("Value1");
        ОжидаетЧто(Результат["headers"]["X-Header2"]).Равно("Value2");
        ОжидаетЧто(Результат["headers"]["X-Header3"]).Равно("BadValue");
        ОжидаетЧто(Результат["headers"]["X-Header4"]).Равно("BadValue");
        ОжидаетЧто(Результат["headers"]["Authorization"]).Равно("Bearer 1111");

    Иначе

        Попытка
            Результат["origin"] = "***";
        Исключение
            Попытка
                ВызватьИсключение Результат.ПолучитьЛог(Истина);
            Исключение
                ВызватьИсключение ПолучитьСтрокуИзДвоичныхДанных(Результат);
            КонецПопытки;
        КонецПопытки;

        ОжидаетЧто(Результат["headers"]["X-Header1"]).Равно("Value1");
        ОжидаетЧто(Результат["headers"]["X-Header2"]).Равно("Value2");

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_ДобавитьBasicАвторизацию(Знач Результат, Знач Вариант)

    Попытка
        Результат["origin"] = "***";
    Исключение
        Попытка
            ВызватьИсключение Результат.ПолучитьЛог(Истина);
        Исключение
            ВызватьИсключение ПолучитьСтрокуИзДвоичныхДанных(Результат);
        КонецПопытки;
    КонецПопытки;

    Данные = ПолучитьДвоичныеДанныеИзСтроки("user:password");
    Basic  = "Basic " + Base64Строка(Данные);
    ОжидаетЧто(Результат["headers"]["Authorization"]).Равно(Basic);

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_ДобавитьBearerАвторизацию(Знач Результат, Знач Вариант)

    Попытка
        Результат["origin"] = "***";
    Исключение
        Попытка
            ВызватьИсключение Результат.ПолучитьЛог(Истина);
        Исключение
            ВызватьИсключение ПолучитьСтрокуИзДвоичныхДанных(Результат);
        КонецПопытки;
    КонецПопытки;

    ОжидаетЧто(Результат["headers"]["Authorization"]).Равно("Bearer " + "123123");

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_ДобавитьAWS4Авторизацию(Знач Результат, Знач Вариант)

    Попытка
        Результат["origin"] = "***";
    Исключение
        Попытка
            ВызватьИсключение Результат.ПолучитьЛог(Истина);
        Исключение
            ВызватьИсключение ПолучитьСтрокуИзДвоичныхДанных(Результат);
        КонецПопытки;
    КонецПопытки;

    ОжидаетЧто(СтрНачинаетсяС(Результат["headers"]["Authorization"], "AWS4")).Равно(Истина);
    ОжидаетЧто(Результат["headers"]["X-Amz-Content-Sha256"] = Неопределено).Равно(Ложь);

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_ДобавитьOAuthV1Авторизацию(Знач Результат, Знач Вариант)

    Попытка
        Результат["origin"] = "***";
    Исключение
        Попытка
            ВызватьИсключение Результат.ПолучитьЛог(Истина);
        Исключение
            ВызватьИсключение ПолучитьСтрокуИзДвоичныхДанных(Результат);
        КонецПопытки;
    КонецПопытки;

    ОжидаетЧто(СтрНачинаетсяС(Результат["headers"]["Authorization"], "OAuth")).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_УстановитьАлгоритмOAuthV1(Знач Результат, Знач Вариант)

    Попытка
        Результат["origin"] = "***";
    Исключение
        Попытка
            ВызватьИсключение Результат.ПолучитьЛог(Истина);
        Исключение
            ВызватьИсключение ПолучитьСтрокуИзДвоичныхДанных(Результат);
        КонецПопытки;
    КонецПопытки;

    ОжидаетЧто(СтрНачинаетсяС(Результат["headers"]["Authorization"], "OAuth")).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_ОбработатьЗапрос(Знач Результат, Знач Вариант)

    Попытка
        Результат["origin"] = "***";
    Исключение
        Попытка
            ВызватьИсключение Результат.ПолучитьЛог(Истина);
        Исключение
            ВызватьИсключение ПолучитьСтрокуИзДвоичныхДанных(Результат);
        КонецПопытки;
    КонецПопытки;

    ОжидаетЧто(Результат["args"]).ИмеетТип("Соответствие");
    ОжидаетЧто(Результат["args"].Количество()).Равно(0);

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_ВыполнитьЗапрос(Знач Результат, Знач Вариант)

    Если Вариант = "Без выполнения" Тогда

        ОжидаетЧто(Результат).Равно(Неопределено);

    ИначеЕсли Вариант = "Выполнение" Тогда

        ОжидаетЧто(Результат = Неопределено).Равно(Ложь);

    Иначе

        Попытка
            Результат["origin"] = "***";
        Исключение
            Попытка
                ВызватьИсключение Результат.ПолучитьЛог(Истина);
            Исключение
                ВызватьИсключение ПолучитьСтрокуИзДвоичныхДанных(Результат);
            КонецПопытки;
        КонецПопытки;

        ОжидаетЧто(Результат["args"]).ИмеетТип("Соответствие");
        ОжидаетЧто(Результат["args"].Количество()).Равно(0);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_ВернутьЗапрос(Знач Результат, Знач Вариант)

    Если Вариант = "Принудительно" Тогда

        ОжидаетЧто(Результат).Равно(Неопределено);

    Иначе

        ОжидаетЧто(Результат).ИмеетТип("HTTPЗапрос");

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_ВернутьСоединение(Знач Результат, Знач Вариант)

    Если Вариант = "Принудительно" Тогда

        ОжидаетЧто(Результат).Равно(Неопределено);

    Иначе

        ОжидаетЧто(Результат).ИмеетТип("HTTPСоединение");

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_ВернутьОтвет(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("HTTPОтвет");

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_ВернутьОтветКакJSONКоллекцию(Знач Результат, Знач Вариант)

    Попытка
        Результат["origin"] = "***";
        Результат["data"]   = "...";
    Исключение
        Попытка
            ВызватьИсключение Результат.ПолучитьЛог(Истина);
        Исключение
            ВызватьИсключение ПолучитьСтрокуИзДвоичныхДанных(Результат);
        КонецПопытки;
    КонецПопытки;

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_ВернутьОтветКакДвоичныеДанные(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("ДвоичныеДанные");

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_ВернутьОтветКакСтроку(Знач Результат, Знач Вариант)

    Попытка

        РезультатJSON = OPI_Инструменты.JSONВСтруктуру(Результат);

        РезультатJSON["origin"] = "***";
        РезультатJSON["data"]   = "...";

        Результат = OPI_Инструменты.JSONСтрокой(РезультатJSON);

    Исключение
        Попытка
            ВызватьИсключение Результат.ПолучитьЛог(Истина);
        Исключение
            ВызватьИсключение ПолучитьСтрокуИзДвоичныхДанных(Результат);
        КонецПопытки;
    КонецПопытки;

    ОжидаетЧто(Результат).ИмеетТип("Строка");

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_ВернутьИмяФайлаТелаОтвета(Знач Результат, Знач Вариант, ИВФ = "")

    ФайлТела        = Новый Файл(ИВФ);
    ФайлТелаВозврат = Новый Файл(Результат);

    ОжидаетЧто(ИВФ).Равно(Результат);
    ОжидаетЧто(ФайлТела.Размер()).Равно(ФайлТелаВозврат.Размер());
    ОжидаетЧто(ФайлТела.Размер() > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_УстановитьПрокси(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("HTTPСоединение");
    ОжидаетЧто(Результат.Прокси.Пользователь("https")).Равно("user");
    ОжидаетЧто(Результат.Прокси.Пароль("https")).Равно("password");

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_УстановитьТаймаут(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("HTTPСоединение");
    ОжидаетЧто(Результат.Таймаут).Равно(60);

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_ИспользоватьКодированиеURL(Знач Результат, Знач Вариант)

    ПравильныйВариант1 = "/page?param1=search?text&param2=John Doe&param3"
        + "=value&another&param4=кириллица&param5=<script>alert('XSS')</script>";

    ОжидаетЧто(Результат["Без кодирования"]).Равно(ПравильныйВариант1);

    ПравильныйВариант2 = "/page?param1=search%3Ftext&param2=John%20Doe&pa" + "ram3=value%26another&param4=%D0%BA%D0%B8%D1%80%D0%B8%D0%BB%D0%"
        + "BB%D0%B8%D1%86%D0%B0&param5=%3Cscript%3Ealert%28%27XSS%27%29%3C%2Fscript%3E";

    ОжидаетЧто(Результат["С кодированием"]).Равно(ПравильныйВариант2);

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_РазделятьМассивыВURL(Знач Результат, Знач Вариант)

    Разделение    = Результат["Разделение"];
    БезРазделения = Результат["Без разделения"];
    РазделениеPhp = Результат["PHP"];

    ПравильныйВариант1 = "/page?arrayfield=val1&arrayfield=val2&arrayfield=val3";
    ОжидаетЧто(Разделение).Равно(ПравильныйВариант1);

    ПравильныйВариант2 = "/page?arrayfield=[val1,val2,val3]";
    ОжидаетЧто(БезРазделения).Равно(ПравильныйВариант2);

    ПравильныйВариант3 = "/page?arrayfield[]=val1&arrayfield[]=val2&arrayfield[]=val3";
    ОжидаетЧто(РазделениеPhp).Равно(ПравильныйВариант3);

    Результат = СтрШаблон("Без разделения: %1;
                          |Разделение: %2
                          |Разделение (php): %3", БезРазделения, Разделение, РазделениеPhp);

    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_ОтправитьДанныеЧастями(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");
    Возврат Результат;

КонецФункции

Функция Проверка_HTTP_ОтправитьЧасть(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["data"]).Равно("data for");
    ОжидаетЧто(Результат["headers"]["Content-Length"]).Равно("8");
    ОжидаетЧто(Результат["headers"]["Content-Range"]).Равно("bytes 5-12/21");

    Возврат Результат;

КонецФункции

Функция Проверка_OpenAI_ПолучитьОтвет(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["id"]).Заполнено();

    Если Не Вариант = "Загрузка картинки" Тогда
        ОжидаетЧто(Результат["object"]).Равно("chat.completion");
        ОжидаетЧто(Результат["choices"]).ИмеетТип("Массив").Заполнено();
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_OpenAI_ПолучитьПредставления(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["model"]).Заполнено();
    ОжидаетЧто(Результат["object"]).Равно("list");
    ОжидаетЧто(Результат["data"]).ИмеетТип("Массив").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_OpenAI_СоздатьАссистента(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["model"]).Заполнено();
    ОжидаетЧто(Результат["id"]).Заполнено();
    ОжидаетЧто(Результат["object"]).Равно("assistant");
    ОжидаетЧто(Результат["name"]).Равно("Math tutor");

    IDАссистента = Результат["id"];
    ЗаписатьПараметр("OpenAI_Assistant", IDАссистента);
    OPI_Инструменты.ДобавитьПоле("OpenAI_Assistant", IDАссистента, "Строка", Параметры);

    Возврат Результат;

КонецФункции

Функция Проверка_OpenAI_УдалитьАссистента(Знач Результат, Знач Вариант, IDАссистента = "")

    ОжидаетЧто(Результат["id"]).Равно(IDАссистента);
    ОжидаетЧто(Результат["object"]).Равно("assistant.deleted");
    ОжидаетЧто(Результат["deleted"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_OpenAI_ПолучитьАссистента(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["model"]).Заполнено();
    ОжидаетЧто(Результат["id"]).Заполнено();
    ОжидаетЧто(Результат["object"]).Равно("assistant");
    ОжидаетЧто(Результат["name"]).Равно("Math tutor");

    Возврат Результат;

КонецФункции

Функция Проверка_OpenAI_ПолучитьСписокАссистентов(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["data"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_OpenAI_ЗагрузитьФайл(Знач Результат, Знач Вариант, Параметры = "", ИмяФайла = "", Размер = "")

    ОжидаетЧто(Результат["id"]).Заполнено();
    ОжидаетЧто(Результат["object"]).Равно("file");
    ОжидаетЧто(Результат["filename"]).Равно(ИмяФайла);
    ОжидаетЧто(Результат["bytes"]).Равно(Размер);
    ОжидаетЧто(Результат["purpose"]).Равно("assistants");

    IDФайла = Результат["id"];
    ЗаписатьПараметр("OpenAI_File", IDФайла);
    OPI_Инструменты.ДобавитьПоле("OpenAI_File", IDФайла, "Строка", Параметры);

    Возврат Результат;

КонецФункции

Функция Проверка_OpenAI_УдалитьФайл(Знач Результат, Знач Вариант, IDФайла = "")

    ОжидаетЧто(Результат["id"]).Равно(IDФайла);
    ОжидаетЧто(Результат["object"]).Равно("file");
    ОжидаетЧто(Результат["deleted"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_OpenAI_ПолучитьИнформациюОФайле(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["id"]).Заполнено();
    ОжидаетЧто(Результат["object"]).Равно("file");

    Возврат Результат;

КонецФункции

Функция Проверка_OpenAI_ПолучитьСписокФайлов(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["data"]).ИмеетТип("Массив");

    Возврат Результат;

КонецФункции

Функция Проверка_OpenAI_СкачатьФайл(Знач Результат, Знач Вариант, Параметры = "")

    Файл = Параметры["Picture"];
    OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);

    ОжидаетЧто(Результат).ИмеетТип("ДвоичныеДанные");
    ОжидаетЧто(Результат.Размер() >= Файл.Размер() + 2).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_OpenAI_ПолучитьСтруктуруСообщения(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_OpenAI_ПолучитьСтруктуруСообщенияКартинки(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_OpenAI_СгенерироватьРечь(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат).ИмеетТип("ДвоичныеДанные");
    ОжидаетЧто(Результат.Размер() >= 137516).Равно(Истина);

    //@skip-check missing-temporary-file-deletion
    ИВФ = ПолучитьИмяВременногоФайла("wav");
    Результат.Записать(ИВФ);

    ЗаписатьПараметр("OpenAI_Speech", ИВФ);
    OPI_Инструменты.ДобавитьПоле("OpenAI_Speech", ИВФ, "Строка", Параметры);

    Возврат Результат;

КонецФункции

Функция Проверка_OpenAI_СоздатьТранскрипцию(Знач Результат, Знач Вариант)

    Текст = нРег(Результат["text"]);
    ОжидаетЧто(СтрНайти(Текст, "attack") > 0).Равно(Истина);
    ОжидаетЧто(СтрНайти(Текст, "fire") > 0).Равно(Истина);
    ОжидаетЧто(СтрНайти(Текст, "orion") > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_OpenAI_ПолучитьКартинки(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["data"]).Заполнено();
    ОжидаетЧто(Результат["created"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_OpenAI_ПолучитьСписокМоделей(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["object"]).Равно("list");
    ОжидаетЧто(Результат["data"]).ИмеетТип("Массив").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_OpenAI_ПолучитьСообщениеАссистента(Знач Результат, Знач Вариант, Проверка = "")

    ОжидаетЧто(Результат).Равно(Проверка);

    Возврат Результат;

КонецФункции

Функция Проверка_OpenAI_ПолучитьСообщениеПользователя(Знач Результат, Знач Вариант, Проверка = "")

    ОжидаетЧто(Результат).Равно(Проверка);

    Возврат Результат;

КонецФункции

Функция Проверка_OpenAI_ПолучитьСообщениеСистемы(Знач Результат, Знач Вариант, Проверка = "")

    ОжидаетЧто(Результат).Равно(Проверка);

    Возврат Результат;

КонецФункции

Функция Проверка_MSSQL_Расширенная_ВыполнитьЗапросБезПодключения(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(СтрНайти(нРег(Результат["error"]), "not connected") > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MSSQL_Расширенная_ПодключениеБезСтроки(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(СтрНайти(нРег(Результат["error"]), "empty connection") > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MSSQL_Расширенная_ПовторноеПодключение(Знач Результат, Знач Вариант)

    ТекстОшибки = нРег(Результат["error"]);
    ЭтоПовтор   = СтрНайти(ТекстОшибки, "already") > 0
        Или СтрНайти(ТекстОшибки, "initialized") > 0
        Или СтрНайти(ТекстОшибки, "connected") > 0;

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(ЭтоПовтор).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MSSQL_Расширенная_ПолучитьЛогПриПодключении(Знач Результат, Знач Вариант, ФайлЛога = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["logs"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["logs"].Количество() > 0).Равно(Истина);

    ОбъектЛога = Новый Файл(ФайлЛога);
    ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
    ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MSSQL_СформироватьСтрокуПодключения(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Строка").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_MSSQL_ОткрытьСоединение(Знач Результат, Знач Вариант)

    Результат = Строка(ТипЗнч(Результат));
    ОжидаетЧто(Результат).Равно("AddIn.OPI_MSSQL.Main");

    Возврат Результат;

КонецФункции

Функция Проверка_MSSQL_ЗакрытьСоединение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MSSQL_ЭтоКоннектор(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MSSQL_ВыполнитьЗапросSQL(Знач Результат, Знач Вариант, Картинка = "")

    Если Вариант = "Соединение" Тогда

        Результат = Строка(ТипЗнч(Результат));
        ОжидаетЧто(Результат).Равно("AddIn.OPI_MSSQL.Main");

    ИначеЕсли ЗначениеЗаполнено(Вариант) Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);

    Иначе

        Blob = Результат["data"][0]["Data"];

        Результат["data"][0]["Data"] = "Binary";
        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Blob.Размер()).Равно(Картинка.Размер());

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MSSQL_ПолучитьНастройкиTLS(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MSSQL_ПолучитьНастройкиЛогирования(Знач Результат, Знач Вариант)

    Если Вариант = "Файл" Тогда

        ОжидаетЧто(Результат["mode"]).Равно("file");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["file_path"])).Равно(Истина);

    ИначеЕсли Вариант = "Память" Тогда

        ОжидаетЧто(Результат["mode"]).Равно("memory");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["max_entries"])).Равно(Истина);

    Иначе

        ОжидаетЧто(Результат["mode"]).Равно("both");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["file_path"])).Равно(Истина);
        ОжидаетЧто(ЗначениеЗаполнено(Результат["max_entries"])).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MSSQL_ПолучитьЛог(Знач Результат, Знач Вариант, ФайлЛога = "")

    Если Вариант = "КакСтрока" Тогда

        ОжидаетЧто(ТипЗнч(Результат)).Равно(Тип("Строка"));
        ОжидаетЧто(СтрДлина(Результат) > 0).Равно(Истина);

        ОбъектЛога = Новый Файл(ФайлЛога);
        ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
        ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    Иначе

        ОжидаетЧто(Результат["result"]).Равно(Истина);

        ОжидаетЧто(Результат["logs"]).ИмеетТип("Массив");
        ОжидаетЧто(Результат["logs"].Количество() > 0).Равно(Истина);

        ОбъектЛога = Новый Файл(ФайлЛога);
        ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
        ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MSSQL_СоздатьБазуДанных(Знач Результат, Знач Вариант)

    Если Вариант = "Открытие" Тогда

        Результат = Строка(ТипЗнч(Результат));
        ОжидаетЧто(Результат).Равно("AddIn.OPI_MSSQL.Main");

    ИначеЕсли Вариант = "Существующая" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MSSQL_СоздатьТаблицу(Знач Результат, Знач Вариант)

    Если Не ЗначениеЗаполнено(Вариант) Тогда
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MSSQL_ДобавитьЗаписи(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MSSQL_ПолучитьЗаписи(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если Не ЗначениеЗаполнено(Вариант) Тогда

        Если ЗначениеЗаполнено(Результат["data"]) Тогда

            Результат["data"][0]["varbinary_field"] = "Binary";

        КонецЕсли;

    Иначе
        ОжидаетЧто(Результат["data"].Количество()).Равно(5);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MSSQL_ОбновитьЗаписи(Знач Результат, Знач Вариант, Количество = "", СтруктураПолей = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если Вариант = "Проверка" Тогда

        ОжидаетЧто(Результат["data"].Количество()).Равно(Количество);

        Для Н = 0 По Результат["data"].ВГраница() Цикл

            Для Каждого Значение Из СтруктураПолей Цикл
                Результат["data"][Н][Значение.Ключ] = Значение.Значение;
            КонецЦикла;

        КонецЦикла;
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MSSQL_УдалитьЗаписи(Знач Результат, Знач Вариант, Количество = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если Вариант = "Проверка" Тогда
        ОжидаетЧто(Результат["data"].Количество()).Равно(Количество);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MSSQL_УдалитьТаблицу(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MSSQL_УдалитьБазуДанных(Знач Результат, Знач Вариант)

    Если Вариант = "Открытие" Тогда

        Результат = Строка(ТипЗнч(Результат));
        ОжидаетЧто(Результат).Равно("AddIn.OPI_MSSQL.Main");

    ИначеЕсли Вариант = "Ошибка" Или Вариант = "Ошибка подключения" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MSSQL_ОчиститьТаблицу(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если Вариант = "Проверка" Тогда
        ОжидаетЧто(Результат["data"].Количество()).Равно(0);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MSSQL_ПолучитьИнформациюОТаблице(Знач Результат, Знач Вариант)

    Если Не ЗначениеЗаполнено(Вариант) Тогда
        ОжидаетЧто(Результат["data"].Количество()).Равно(16);
    Иначе
        ОжидаетЧто(Результат["data"].Количество()).Равно(0);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MSSQL_ДобавитьКолонкуТаблицы(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если Вариант = "Проверка" Тогда

        Найдена = Ложь;

        Для Каждого Колонка Из Результат["data"] Цикл

            Если Колонка["column_name"] = "new_field" Тогда

                ОжидаетЧто(нРег(Колонка["data_type"])).Равно("bigint");
                Найдена = Истина;
            КонецЕсли;

        КонецЦикла;

        ОжидаетЧто(Найдена).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MSSQL_УдалитьКолонкуТаблицы(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если Вариант = "Проверка" Тогда

        Найдена = Ложь;

        Для Каждого Колонка Из Результат["data"] Цикл

            Если Колонка["column_name"] = "new_field" Тогда
                Найдена = Истина;
            КонецЕсли;

        КонецЦикла;

        ОжидаетЧто(Найдена).Равно(Ложь);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MSSQL_ГарантироватьТаблицу(Знач Результат, Знач Вариант, СтруктураКолонок = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если Вариант = "Проверка" Тогда

        ОжидаетЧто(Результат["data"].Количество()).Равно(СтруктураКолонок.Количество());

        Для Каждого Колонка Из Результат["data"] Цикл
            ОжидаетЧто(нРег(Колонка["data_type"])).Равно(нРег(СтруктураКолонок[Колонка["column_name"]]));
        КонецЦикла;

    Иначе
        ОжидаетЧто(Результат["commit"]["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MSSQL_ГарантироватьЗаписи(Знач Результат, Знач Вариант)

    Если Вариант = "Вставка" Или Вариант = "Обновление" Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);

    ИначеЕсли Вариант = "Проверка вставки" Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["data"].Количество()).Равно(2);

    ИначеЕсли Вариант = "Проверка обновления" Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["data"].Количество()).Равно(3);

        Найдена = Ложь;

        Для Каждого Запись Из Результат["data"] Цикл
            Если Запись["id"] = 1 Тогда
                ОжидаетЧто(Запись["name"]).Равно("Vitaly Updated");
                ОжидаетЧто(Запись["salary"]).Равно(1500.50);
                Найдена = Истина;
            КонецЕсли;
        КонецЦикла;

        ОжидаетЧто(Найдена).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MSSQL_ПолучитьСтруктуруФильтраЗаписей(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Если Вариант = "Пустая" Тогда

        Для Каждого Элемент Из Результат Цикл

            Если OPI_Инструменты.ЭтоПримитивныйТип(Элемент.Значение) Тогда
                ОжидаетЧто(ЗначениеЗаполнено(Элемент.Значение)).Равно(Ложь);
            КонецЕсли;

        КонецЦикла;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_Расширенная_ПолучитьПриветствиеБезПодключения(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(СтрНайти(нРег(Результат["error"]), "not connected") > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_Расширенная_ПодключениеБезАдреса(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(СтрНайти(нРег(Результат["error"]), "empty address") > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_Расширенная_ПовторноеПодключение(Знач Результат, Знач Вариант)

    ТекстОшибки = нРег(Результат["error"]);
    ЭтоПовтор   = СтрНайти(ТекстОшибки, "already") > 0
        Или СтрНайти(ТекстОшибки, "initialized") > 0
        Или СтрНайти(ТекстОшибки, "connected") > 0;

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(ЭтоПовтор).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_Расширенная_ПолучитьЛогПриПодключении(Знач Результат, Знач Вариант, ФайлЛога = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["logs"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["logs"].Количество() > 0).Равно(Истина);

    ОбъектЛога = Новый Файл(ФайлЛога);
    ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
    ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_ОткрытьСоединение(Знач Результат, Знач Вариант)

    Результат = Строка(ТипЗнч(Результат));
    ОжидаетЧто(Результат).Равно("AddIn.OPI_FTP.Main");

    Если СтрНайти(Вариант, "HTTP") Тогда
        OPI_Инструменты.Пауза(2);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_ПолучитьПриветственноеСообщение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["data"]).Заполнено();

    Если СтрНайти(Вариант, "HTTP") Тогда
        OPI_Инструменты.Пауза(2);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_ПолучитьСписокРасширенийПротокола(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["data"]).Заполнено();

    Если СтрНайти(Вариант, "HTTP") Тогда
        OPI_Инструменты.Пауза(2);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_Пинг(Знач Результат, Знач Вариант)

    Если ЭтоТестCLI() Тогда
        ОжидаетЧто(нРег(Результат)).Равно("true");
    Иначе
        ОжидаетЧто(Результат).Равно(Истина);
    КонецЕсли;

    Если СтрНайти(Вариант, "HTTP") Тогда
        OPI_Инструменты.Пауза(2);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_ВыполнитьНестандартнуюКоманду(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["status"]).Заполнено();
    ОжидаетЧто(Результат["data"]).Заполнено();

    Если СтрНайти(Вариант, "HTTP") Тогда
        OPI_Инструменты.Пауза(2);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_ВыполнитьПроизвольнуюКоманду(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["status"]).Заполнено();
    ОжидаетЧто(Результат["data"]).Заполнено();

    Если СтрНайти(Вариант, "HTTP") Тогда
        OPI_Инструменты.Пауза(2);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_ПолучитьТекущийКаталог(Знач Результат, Знач Вариант, Параметры = "")

    Путь = Результат["path"];

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Путь).Заполнено();

    ЗаписатьПараметр("FTP_RootPath", Путь);
    OPI_Инструменты.ДобавитьПоле("FTP_RootPath", Путь, "Строка", Параметры);

    Если СтрНайти(Вариант, "HTTP") Тогда
        OPI_Инструменты.Пауза(2);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_ИзменитьТекущийКаталог(Знач Результат, Знач Вариант, Путь = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если СтрНайти(Вариант, "Проверка") И Не ЭтоТестCLI() Тогда
        ОжидаетЧто(СтрЗаканчиваетсяНа(Результат["path"], Путь)).Равно(Истина);
    КонецЕсли;

    Если СтрНайти(Вариант, "HTTP") Тогда
        OPI_Инструменты.Пауза(2);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_ПолучитьКонфигурациюСоединения(Знач Результат, Знач Вариант, Параметры = "")

    Если СтрНайти(Вариант, "Проверка") > 0 Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["data"]).Заполнено();
        ОжидаетЧто(Результат["close_connection"]["result"]).Равно(Истина);

    Иначе

        ИспользоватьПрокси = Параметры["Proxy"];
        FTPS               = Параметры["TLS"];

        Если ТипЗнч(Результат) = Тип("Структура") Тогда

            ОжидаетЧто(Результат.Свойство("set")).Равно(Истина);
            Результат["set"]["password"] = "***";

            Если FTPS Тогда
                ОжидаетЧто(Результат.Свойство("tls")).Равно(Истина);
            КонецЕсли;

            Если ИспользоватьПрокси Тогда
                ОжидаетЧто(Результат.Свойство("proxy")).Равно(Истина);
                Результат["proxy"]["password"] = "***";
            КонецЕсли;

        Иначе

            ОжидаетЧто(Результат["set"] <> Неопределено).Равно(Истина);
            Результат["set"]["password"] = "***";

            Если FTPS Тогда
                ОжидаетЧто(Результат["tls"] <> Неопределено).Равно(Истина);
            КонецЕсли;

            Если ИспользоватьПрокси Тогда
                ОжидаетЧто(Результат["proxy"] <> Неопределено).Равно(Истина);
                Результат["proxy"]["password"] = "***";
            КонецЕсли;

        КонецЕсли;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_ЗакрытьСоединение(Знач Результат, Знач Вариант)

    Если СтрНайти(Вариант, "Открытие") > 0 Тогда
        Результат = Строка(ТипЗнч(Результат));
        ОжидаетЧто(Результат).Равно("AddIn.OPI_FTP.Main");
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Если СтрНайти(Вариант, "HTTP") Тогда
        OPI_Инструменты.Пауза(2);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_ЭтоКоннектор(Знач Результат, Знач Вариант)

    Если СтрНайти(Вариант, "Открытие") > 0 Тогда
        Результат = Строка(ТипЗнч(Результат));
        ОжидаетЧто(Результат).Равно("AddIn.OPI_FTP.Main");
    Иначе
        ОжидаетЧто(Результат).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_ПолучитьНастройкиСоединения(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Результат["password"] = "***";

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_ПолучитьНастройкиПрокси(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Результат["password"] = "***";

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_ПолучитьНастройкиTLS(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_ПолучитьНастройкиЛогирования(Знач Результат, Знач Вариант)

    Если Вариант = "Файл" Тогда

        ОжидаетЧто(Результат["mode"]).Равно("file");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["file_path"])).Равно(Истина);

    ИначеЕсли Вариант = "Память" Тогда

        ОжидаетЧто(Результат["mode"]).Равно("memory");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["max_entries"])).Равно(Истина);

    Иначе

        ОжидаетЧто(Результат["mode"]).Равно("both");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["file_path"])).Равно(Истина);
        ОжидаетЧто(ЗначениеЗаполнено(Результат["max_entries"])).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_ПолучитьЛог(Знач Результат, Знач Вариант, ФайлЛога = "")

    Если Вариант = "КакСтрока" Тогда

        ОжидаетЧто(ТипЗнч(Результат)).Равно(Тип("Строка"));
        ОжидаетЧто(СтрДлина(Результат) > 0).Равно(Истина);

        ОбъектЛога = Новый Файл(ФайлЛога);
        ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
        ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    Иначе

        ОжидаетЧто(Результат["result"]).Равно(Истина);

        ОжидаетЧто(Результат["logs"]).ИмеетТип("Массив");
        ОжидаетЧто(Результат["logs"].Количество() > 0).Равно(Истина);

        ОбъектЛога = Новый Файл(ФайлЛога);
        ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
        ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_СоздатьНовуюДиректорию(Знач Результат, Знач Вариант, Основной = Ложь)

    Если СтрНайти(Вариант, "Удаление") > 0 Тогда
        Возврат Результат;
    КонецЕсли;

    Если Основной Или СтрНайти(Вариант, "Вложенная") > 0 Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);

    ИначеЕсли СтрНайти(Вариант, "Проверка 1") > 0 Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["data"]).ИмеетТип("Массив").ИмеетДлину(1);
        ОжидаетЧто(Результат["data"][0]["name"]).Равно("another_one");

    ИначеЕсли СтрНайти(Вариант, "Проверка 2") > 0 Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["data"]).ИмеетТип("Массив").ИмеетДлину(1);
        ОжидаетЧто(Результат["data"][0]["objects"]).ИмеетТип("Массив").ИмеетДлину(1);

    Иначе

        ОжидаетЧто(Результат["result"]).Равно(Ложь);

    КонецЕсли;

    Если СтрНайти(Вариант, "HTTP") Тогда
        OPI_Инструменты.Пауза(2);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_ПолучитьСписокОбъектов(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если СтрНайти(Вариант, "Файл") > 0 Тогда
        ОжидаетЧто(Результат["data"]).ИмеетТип("Массив").ИмеетДлину(0);
    КонецЕсли;

    Если СтрНайти(Вариант, "HTTP") Тогда
        OPI_Инструменты.Пауза(2);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_ЗагрузитьФайл(Знач Результат, Знач Вариант, Размер = "")

    ОжидаетЧто(Результат["bytes"]).Равно(Размер);

    Если Не СтрНайти(Вариант, "Размер 1") > 0 Или СтрНайти(Вариант, "Размер 2") > 0 Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);

    КонецЕсли;

    Если СтрНайти(Вариант, "HTTP") Тогда
        OPI_Инструменты.Пауза(2);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_УдалитьФайл(Знач Результат, Знач Вариант)

    Если СтрНайти(Вариант, "Несуществующий") > 0 Тогда

        ОжидаетЧто(Результат["result"]).Равно(Ложь);

    ИначеЕсли СтрНайти(Вариант, "Проверка") > 0 Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["data"]).ИмеетТип("Массив").ИмеетДлину(1);

    Иначе

        ОжидаетЧто(Результат["result"]).Равно(Истина);

    КонецЕсли;

    Если СтрНайти(Вариант, "HTTP") Тогда
        OPI_Инструменты.Пауза(2);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_УдалитьДиректорию(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если СтрНайти(Вариант, "HTTP") Тогда
        OPI_Инструменты.Пауза(2);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_ОчиститьДиректорию(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если СтрНайти(Вариант, "Проверка") > 0 Тогда
        ОжидаетЧто(Результат["data"]).ИмеетТип("Массив").ИмеетДлину(0);
    КонецЕсли;

    Если СтрНайти(Вариант, "HTTP") Тогда
        OPI_Инструменты.Пауза(2);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_ПолучитьРазмерОбъекта(Знач Результат, Знач Вариант)

    Если СтрНайти(Вариант, "Несуществующий") > 0 Тогда
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Если СтрНайти(Вариант, "HTTP") Тогда
        OPI_Инструменты.Пауза(2);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_ИзменитьПуть(Знач Результат, Знач Вариант)

    Если СтрНайти(Вариант, "Список, обратно") > 0 Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["data"]).ИмеетТип("Массив").ИмеетДлину(1);
        ОжидаетЧто(Результат["data"][0]["path"]).Равно("new_dir");
        ОжидаетЧто(Результат["data"][0]["objects"][0]["path"]).Равно("new_dir/pic_from_disk.png");

    ИначеЕсли СтрНайти(Вариант, "Список") > 0 Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["data"]).ИмеетТип("Массив").ИмеетДлину(1);
        ОжидаетЧто(Результат["data"][0]["path"]).Равно("brand_new_dir");
        ОжидаетЧто(Результат["data"][0]["objects"][0]["path"]).Равно("brand_new_dir/pic_copy.png");

    ИначеЕсли СтрНайти(Вариант, "Проверка, старый") > 0 Тогда

        ОжидаетЧто(Результат["result"]).Равно(Ложь);

    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Если СтрНайти(Вариант, "HTTP") Тогда
        OPI_Инструменты.Пауза(2);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_СохранитьФайл(Знач Результат, Знач Вариант, РазмерРезультата = "", РазмерПроверки = "")

    Если СтрНайти(Вариант, "Размер файла") > 0 Тогда
        ОжидаетЧто(Результат).Равно(РазмерРезультата);
        ОжидаетЧто(Результат).Равно(РазмерПроверки);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Если СтрНайти(Вариант, "HTTP") Тогда
        OPI_Инструменты.Пауза(2);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_FTP_ПолучитьДанныеФайла(Знач Результат, Знач Вариант, РазмерПроверки = "")

    Если СтрНайти(Вариант, "Размер файла") > 0 Тогда
        ОжидаетЧто(Результат).Равно(РазмерПроверки);
    ИначеЕсли СтрНайти(Вариант, "Размер") > 0 Тогда
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    Иначе
        ОжидаетЧто(Результат).ИмеетТип("ДвоичныеДанные");
    КонецЕсли;

    Если СтрНайти(Вариант, "HTTP") Тогда
        OPI_Инструменты.Пауза(2);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SSH_ОткрытьСоединение(Знач Результат, Знач Вариант)

    Результат = Строка(ТипЗнч(Результат));
    ОжидаетЧто(Результат).Равно("AddIn.OPI_SSH.Main");

    Если СтрНайти(Вариант, "HTTP") Тогда
        OPI_Инструменты.Пауза(2);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SSH_ВыполнитьКоманду(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["stderr"]).Равно("");
    ОжидаетЧто(Результат["exit_code"]).Равно("0");

    Возврат Результат;

КонецФункции

Функция Проверка_SSH_ПолучитьКонфигурациюСоединения(Знач Результат, Знач Вариант)

    Если СтрНайти(Вариант, "Проверка") > 0 Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["stderr"]).Равно("");
        ОжидаетЧто(Результат["stdout"]).Заполнено();
        ОжидаетЧто(Результат["exit_code"]).Равно("0");
        ОжидаетЧто(Результат["close_connection"]["result"]).Равно(Истина);

    Иначе

        ОжидаетЧто(Результат["set"]).Заполнено();

        Если OPI_Инструменты.ПолеКоллекцииСуществует(Результат["set"], "password") Тогда
            Результат["set"]["password"] = "***";
        КонецЕсли;

        Если OPI_Инструменты.ПолеКоллекцииСуществует(Результат["set"], "key_path") Тогда
            Результат["set"]["key_path"] = "./ssh_key";
            Результат["set"]["pub_path"] = "./ssh_key.pub";
        КонецЕсли;

        Если OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "proxy") Тогда

            ОжидаетЧто(Результат["proxy"]).Заполнено();
            Результат["proxy"]["password"] = "***";

        КонецЕсли;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SSH_ЗакрытьСоединение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_SSH_ЭтоКоннектор(Знач Результат, Знач Вариант)

    Если СтрНайти(Вариант, "Ошибка") Тогда
        ОжидаетЧто(Результат).Равно(Ложь);
    Иначе
        ОжидаетЧто(Результат).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SSH_Расширенная_ВыполнитьКомандуБезПодключения(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(СтрНайти(нРег(Результат["error"]), "no session") > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_SSH_Расширенная_ПодключениеБезНастроек(Знач Результат, Знач Вариант)

    ТекстОшибки = нРег(Результат["error"]);
    ЭтоОшибкаНастроек = СтрНайти(ТекстОшибки, "no configuration") > 0
        Или СтрНайти(ТекстОшибки, "no settings") > 0;

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(ЭтоОшибкаНастроек).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_SSH_Расширенная_ПолучитьЛогПриПодключении(Знач Результат, Знач Вариант, ФайлЛога = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["logs"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["logs"].Количество() > 0).Равно(Истина);

    ОбъектЛога = Новый Файл(ФайлЛога);
    ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
    ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_SSH_ПолучитьНастройкиЛогинПароль(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["auth_type"]).Равно("password");
    ОжидаетЧто(Результат["host"]).Заполнено();
    ОжидаетЧто(Результат["port"]).Заполнено();
    ОжидаетЧто(Результат["username"]).Заполнено();
    ОжидаетЧто(Результат["password"]).Заполнено();

    Результат["password"] = "***";

    Возврат Результат;

КонецФункции

Функция Проверка_SSH_ПолучитьНастройкиПриватныйКлюч(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["auth_type"]).Равно("private_key");
    ОжидаетЧто(Результат["host"]).Заполнено();
    ОжидаетЧто(Результат["port"]).Заполнено();
    ОжидаетЧто(Результат["username"]).Заполнено();
    ОжидаетЧто(Результат["key_path"]).Заполнено();
    ОжидаетЧто(Результат["pub_path"]).Заполнено();

    Результат["key_path"] = "./ssh_key";
    Результат["pub_path"] = "./ssh_key.pub";

    Возврат Результат;

КонецФункции

Функция Проверка_SSH_ПолучитьНастройкиЧерезАгента(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["auth_type"]).Равно("agent");
    ОжидаетЧто(Результат["host"]).Заполнено();
    ОжидаетЧто(Результат["port"]).Заполнено();
    ОжидаетЧто(Результат["username"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_SSH_ПолучитьНастройкиKI(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["auth_type"]).Равно("keyboard_interactive");
    ОжидаетЧто(Результат["host"]).Заполнено();
    ОжидаетЧто(Результат["port"]).Заполнено();
    ОжидаетЧто(Результат["username"]).Заполнено();
    ОжидаетЧто(Результат["keyboard_responses"]).Заполнено();

    Результат["keyboard_responses"][1] = "***";

    Возврат Результат;

КонецФункции

Функция Проверка_SSH_ПолучитьНастройкиЛогирования(Знач Результат, Знач Вариант)

    Если Вариант = "Файл" Тогда

        ОжидаетЧто(Результат["mode"]).Равно("file");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["file_path"])).Равно(Истина);

    ИначеЕсли Вариант = "Память" Тогда

        ОжидаетЧто(Результат["mode"]).Равно("memory");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["max_entries"])).Равно(Истина);

    Иначе

        ОжидаетЧто(Результат["mode"]).Равно("both");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["file_path"])).Равно(Истина);
        ОжидаетЧто(ЗначениеЗаполнено(Результат["max_entries"])).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SSH_ПолучитьЛог(Знач Результат, Знач Вариант, ФайлЛога = "")

    Если Вариант = "КакСтрока" Тогда

        ОжидаетЧто(ТипЗнч(Результат)).Равно(Тип("Строка"));
        ОжидаетЧто(СтрДлина(Результат) > 0).Равно(Истина);

        ОбъектЛога = Новый Файл(ФайлЛога);
        ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
        ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    Иначе

        ОжидаетЧто(Результат["result"]).Равно(Истина);

        ОжидаетЧто(Результат["logs"]).ИмеетТип("Массив");
        ОжидаетЧто(Результат["logs"].Количество() > 0).Равно(Истина);

        ОбъектЛога = Новый Файл(ФайлЛога);
        ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
        ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SSH_ПолучитьНастройкиПрокси(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Результат["password"] = "***";

    Возврат Результат;

КонецФункции

Функция Проверка_SFTP_Расширенная_ПолучитьСписокБезПодключения(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(СтрНайти(нРег(Результат["error"]), "no session") > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_SFTP_Расширенная_ПодключениеБезНастроек(Знач Результат, Знач Вариант)

    ТекстОшибки = нРег(Результат["error"]);
    ЭтоОшибкаНастроек = СтрНайти(ТекстОшибки, "no configuration") > 0
        Или СтрНайти(ТекстОшибки, "no settings") > 0;

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(ЭтоОшибкаНастроек).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_SFTP_Расширенная_ПовторноеПодключение(Знач Результат, Знач Вариант)

    ТекстОшибки = нРег(Результат["error"]);
    ЭтоПовтор   = СтрНайти(ТекстОшибки, "already") > 0
        Или СтрНайти(ТекстОшибки, "initialized") > 0
        Или СтрНайти(ТекстОшибки, "connected") > 0;

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(ЭтоПовтор).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_SFTP_Расширенная_ПолучитьЛогПриПодключении(Знач Результат, Знач Вариант, ФайлЛога = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["logs"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["logs"].Количество() > 0).Равно(Истина);

    ОбъектЛога = Новый Файл(ФайлЛога);
    ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
    ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_SFTP_ОткрытьСоединение(Знач Результат, Знач Вариант)

    Результат = Строка(ТипЗнч(Результат));
    ОжидаетЧто(Результат).Равно("AddIn.OPI_SSH.Main");

    Если СтрНайти(Вариант, "HTTP") Тогда
        OPI_Инструменты.Пауза(2);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SFTP_СоздатьНовуюДиректорию(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_SFTP_УдалитьДиректорию(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_SFTP_ПолучитьТекущийКаталог(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["path"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_SFTP_ПолучитьСписокОбъектов(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["data"]).ИмеетТип("Массив").Заполнено();
    ОжидаетЧто(Результат["data"][0]["uid"]).Заполнено();
    ОжидаетЧто(Результат["data"][0]["is_directory"]).Равно(Истина);

    Если СтрНайти(Вариант, "Без рекурсии") = 0 Тогда

        ОжидаетЧто(Результат["data"][0]["objects"].Количество()).Равно(3);
        ОжидаетЧто(Результат["data"][0]["objects"][1]["objects"].Количество()).Равно(1);
        ОжидаетЧто(Результат["data"][0]["objects"][2]["objects"].Количество()).Равно(2);

        ОжидаетЧто(Результат["data"][0]["objects"][0]["objects"]).Равно(Неопределено);

    Иначе

        ОжидаетЧто(Результат["data"][0]["objects"]).Равно(Неопределено);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SFTP_ИзменитьТекущийКаталог(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если СтрНайти(Вариант, "Проверка") > 0 Тогда
        ОжидаетЧто(Результат["path"]).Равно("/config/test_folder");
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SFTP_ЗагрузитьФайл(Знач Результат, Знач Вариант, Размер = "")

    Если СтрНайти(Вариант, "Размер файла") > 0 Тогда

        ОжидаетЧто(Результат).Равно(Размер);

    Иначе

        ОжидаетЧто(Результат["bytes"]).Равно(Размер);
        ОжидаетЧто(Результат["result"]).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SFTP_УдалитьФайл(Знач Результат, Знач Вариант)

    Если СтрНайти(Вариант, "Несуществующий") > 0 Тогда

        ОжидаетЧто(Результат["result"]).Равно(Ложь);

    ИначеЕсли СтрНайти(Вариант, "Проверка") > 0 Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["data"]).ИмеетТип("Массив").ИмеетДлину(0);

    Иначе

        ОжидаетЧто(Результат["result"]).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SFTP_ЭтоКоннектор(Знач Результат, Знач Вариант)

    Если СтрНайти(Вариант, "Ошибка") Тогда
        ОжидаетЧто(Результат).Равно(Ложь);
    Иначе
        ОжидаетЧто(Результат).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SFTP_ПолучитьНастройкиЛогинПароль(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["auth_type"]).Равно("password");
    ОжидаетЧто(Результат["host"]).Заполнено();
    ОжидаетЧто(Результат["port"]).Заполнено();
    ОжидаетЧто(Результат["username"]).Заполнено();
    ОжидаетЧто(Результат["password"]).Заполнено();

    Результат["password"] = "***";

    Возврат Результат;

КонецФункции

Функция Проверка_SFTP_ПолучитьНастройкиПриватныйКлюч(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["auth_type"]).Равно("private_key");
    ОжидаетЧто(Результат["host"]).Заполнено();
    ОжидаетЧто(Результат["port"]).Заполнено();
    ОжидаетЧто(Результат["username"]).Заполнено();
    ОжидаетЧто(Результат["key_path"]).Заполнено();
    ОжидаетЧто(Результат["pub_path"]).Заполнено();

    Результат["key_path"] = "./ssh_key";
    Результат["pub_path"] = "./ssh_key.pub";

    Возврат Результат;

КонецФункции

Функция Проверка_SFTP_ПолучитьНастройкиЧерезАгента(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["auth_type"]).Равно("agent");
    ОжидаетЧто(Результат["host"]).Заполнено();
    ОжидаетЧто(Результат["port"]).Заполнено();
    ОжидаетЧто(Результат["username"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_SFTP_ПолучитьНастройкиKI(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["auth_type"]).Равно("keyboard_interactive");
    ОжидаетЧто(Результат["host"]).Заполнено();
    ОжидаетЧто(Результат["port"]).Заполнено();
    ОжидаетЧто(Результат["username"]).Заполнено();
    ОжидаетЧто(Результат["keyboard_responses"]).Заполнено();

    Результат["keyboard_responses"][1] = "***";

    Возврат Результат;

КонецФункции

Функция Проверка_SFTP_ПолучитьНастройкиПрокси(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Результат["password"] = "***";

    Возврат Результат;

КонецФункции

Функция Проверка_SFTP_ПолучитьКонфигурациюСоединения(Знач Результат, Знач Вариант)

    Если СтрНайти(Вариант, "Проверка") > 0 Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["stderr"]).Равно("");
        ОжидаетЧто(Результат["stdout"]).Заполнено();
        ОжидаетЧто(Результат["exit_code"]).Равно("0");
        ОжидаетЧто(Результат["close_connection"]["result"]).Равно(Истина);

    Иначе

        ОжидаетЧто(Результат["set"]).Заполнено();

        Если OPI_Инструменты.ПолеКоллекцииСуществует(Результат["set"], "password") Тогда
            Результат["set"]["password"] = "***";
        КонецЕсли;

        Если OPI_Инструменты.ПолеКоллекцииСуществует(Результат["set"], "key_path") Тогда
            Результат["set"]["key_path"] = "./ssh_key";
            Результат["set"]["pub_path"] = "./ssh_key.pub";
        КонецЕсли;

        Если OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "proxy") Тогда

            ОжидаетЧто(Результат["proxy"]).Заполнено();
            Результат["proxy"]["password"] = "***";

        КонецЕсли;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SFTP_ЗакрытьСоединение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_SFTP_СохранитьФайл(Знач Результат, Знач Вариант, РазмерПроверки = "")

    Если СтрНайти(Вариант, "Размер файла") > 0 Тогда
        ОжидаетЧто(Результат).Равно(РазмерПроверки);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Если СтрНайти(Вариант, "HTTP") Тогда
        OPI_Инструменты.Пауза(2);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SFTP_ПолучитьДанныеФайла(Знач Результат, Знач Вариант, РазмерПроверки = "")

    Если СтрНайти(Вариант, "Размер файла") > 0 Тогда
        ОжидаетЧто(Результат).Равно(РазмерПроверки);
    ИначеЕсли СтрНайти(Вариант, "Размер") > 0 Тогда
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    Иначе
        ОжидаетЧто(Результат).ИмеетТип("ДвоичныеДанные");
    КонецЕсли;

    Если СтрНайти(Вариант, "HTTP") Тогда
        OPI_Инструменты.Пауза(2);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SFTP_ИзменитьПуть(Знач Результат, Знач Вариант)

    Если СтрНайти(Вариант, "Проверка, Старый") Тогда
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_SFTP_ПолучитьИнформациюОФайле(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["data"]).Заполнено();
    ОжидаетЧто(Результат["data"]["size"]).Заполнено();
    ОжидаетЧто(Результат["data"]["modified"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_СформироватьПараметрыДоступа(Знач Результат, Знач Вариант)

    Результат.Вставить("apiTokenInstance", "***");
    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_ПолучитьКодАвторизации(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["data"]["reason"]).Равно("already_registered");
    Возврат Неопределено;

КонецФункции

Функция Проверка_GreenMax_РазлогинитьИнстанс(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["isLogout"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_ОтправитьКодАвторизации(Знач Результат, Знач Вариант)

    Возврат Неопределено;

КонецФункции

Функция Проверка_GreenMax_ПолучитьСостояниеИнстанса(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["stateInstance"]).Равно("authorized");

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_ПерезапуститьИнстанс(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["isReboot"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_ПолучитьСтруктуруНастроекИнстанса(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Если Вариант = "Пустая" Тогда

        Для Каждого Элемент Из Результат Цикл

            Если OPI_Инструменты.ЭтоПримитивныйТип(Элемент.Значение) Тогда
                ОжидаетЧто(ЗначениеЗаполнено(Элемент.Значение)).Равно(Ложь);
            КонецЕсли;

        КонецЦикла;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_ПолучитьНастройкиИнстанса(Знач Результат, Знач Вариант, Параметры = "")

    Попытка
        JSON = OPI_Инструменты.JSONСтрокой(Результат);
        JSON = СтрЗаменить(JSON, Параметры["GreenMax_AccountID"], "1234567890@c.us");

        Результат = OPI_Инструменты.JsonВСтруктуру(JSON, Истина);
    Исключение
        Сообщить("Ошибка JSON");
    КонецПопытки;

    ОжидаетЧто(Результат["delaySendMessagesMilliseconds"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_УстановитьНастройкиИнстанса(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["saveSettings"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_УстановитьКартинкуПрофиля(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["setProfilePicture"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_ПолучитьИнформациюОбАккаунте(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["chatId"]).Заполнено();
    ОжидаетЧто(Результат["phone"]).Заполнено();

    Результат["chatId"] = "***";
    Результат["phone"]  = "***";

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_ПроверитьАккаунт(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["chatId"]).Заполнено();
    ОжидаетЧто(Результат["exist"]).Равно(Истина);

    IDКонтакта = Результат["chatId"];
    ЗаписатьПараметр("GreenMax_MyID", IDКонтакта);
    Параметры.Вставить("GreenMax_MyID", IDКонтакта);

    Результат["chatId"] = "***";

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_ПолучитьСписокКонтактов(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат).ИмеетТип("Массив");
    ОжидаетЧто(Результат[0]["chatId"]).Заполнено();

    IDКонтакта = Результат[0]["chatId"];
    ЗаписатьПараметр("GreenMax_ContactID", IDКонтакта);
    Параметры.Вставить("GreenMax_ContactID", IDКонтакта);

    Результат[0]["chatId"]      = "***";
    Результат[0]["phoneNumber"] = "***";

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_ПолучитьИнформациюОКонтакте(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["chatId"]).Заполнено();
    ОжидаетЧто(Результат["name"]).Заполнено();
    ОжидаетЧто(Результат["avatar"]).Заполнено();

    Результат["chatId"]      = "***";
    Результат["phoneNumber"] = "***";

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_ПолучитьСписокЧатов(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Массив");
    ОжидаетЧто(Результат[0]["chatId"]).Заполнено();

    Для Каждого Чат Из Результат Цикл
        Чат["phoneNumber"] = "***";
        Чат["chatId"]      = "***";
    КонецЦикла;

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_ПолучитьАватарЧата(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["urlAvatar"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_СоздатьГруппу(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["chatId"]).Заполнено();
    ОжидаетЧто(Результат["created"]).Равно(Истина);

    IDГруппы = Результат["chatId"];
    ЗаписатьПараметр("GreenMax_GroupID", IDГруппы);
    Параметры.Вставить("GreenMax_GroupID", IDГруппы);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_УдалитьУчастникаГруппы(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["removeParticipant"] <> Неопределено).Равно(Истина);

    Возврат Неопределено;

КонецФункции

Функция Проверка_GreenMax_ДобавитьУчастникаГруппы(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["addParticipant"] <> Неопределено).Равно(Истина);

    Возврат Неопределено;

КонецФункции

Функция Проверка_GreenMax_ВыйтиИзГруппы(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["leaveGroup"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_ИзменитьИмяГруппы(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["updateGroupName"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_ПолучитьИнформациюОГруппе(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["creation"]).Заполнено();
    ОжидаетЧто(Результат["subject"]).Равно("Новая группа");

    Результат["chatId"] = "***";

    Для Каждого Участник Из Результат["participants"] Цикл
        Участник["chatId"] = "***";
    КонецЦикла;

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_ИзменитьНастройкиГруппы(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["updateGroupSettings"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_ПолучитьСтруктуруНастроекГруппы(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Если Вариант = "Пустая" Тогда

        Для Каждого Элемент Из Результат Цикл

            Если OPI_Инструменты.ЭтоПримитивныйТип(Элемент.Значение) Тогда
                ОжидаетЧто(ЗначениеЗаполнено(Элемент.Значение)).Равно(Ложь);
            КонецЕсли;

        КонецЦикла;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_НазначитьПраваАдминистратора(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["setGroupAdmin"] <> Неопределено).Равно(Истина);

    Возврат Неопределено;

КонецФункции

Функция Проверка_GreenMax_ОтозватьПраваАдминистратора(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["removeAdmin"] <> Неопределено ).Равно(Истина);

    Возврат Неопределено;

КонецФункции

Функция Проверка_GreenMax_УстановитьКартинкуГруппы(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["setGroupPicture"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_ОтправитьТекстовоеСообщение(Знач Результат, Знач Вариант, Знач Параметры = "")

    ОжидаетЧто(Результат["idMessage"]).Заполнено();

    IDСообщения = Результат["idMessage"];
    ЗаписатьПараметр("GreenMax_MessageID", IDСообщения);
    Параметры.Вставить("GreenMax_MessageID", IDСообщения);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_ОтправитьФайл(Знач Результат, Знач Вариант, Знач Параметры = "")

    ОжидаетЧто(Результат["idMessage"]).Заполнено();

    Если Не ЗначениеЗаполнено(Вариант) Тогда
        IDСообщения = Результат["idMessage"];
        ЗаписатьПараметр("GreenMax_FileMessageID", IDСообщения);
        Параметры.Вставить("GreenMax_FileMessageID", IDСообщения);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_ОтправитьФайлПоURL(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["idMessage"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_ПолучитьУведомление(Знач Результат, Знач Вариант, Знач Параметры = "")

    ОжидаетЧто(Результат["receiptId"]).Заполнено();
    ОжидаетЧто(Результат["body"]).Заполнено();

    Если Не ЗначениеЗаполнено(Вариант) Тогда
        IDСообщения = Результат["receiptId"];
        ЗаписатьПараметр("GreenMax_ReceiptID", IDСообщения);
        Параметры.Вставить("GreenMax_ReceiptID", IDСообщения);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_УдалитьУведомление(Знач Результат, Знач Вариант, Знач Параметры = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_ОтметитьСообщенияКакПрочитанные(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["setRead"]).ИмеетТип("Булево");

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_ПолучитьИсториюСообщенийЧата(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат).ИмеетТип("Массив").ИмеетДлину(3);

    IDСообщения = Результат[0]["idMessage"];
    ЗаписатьПараметр("GreenMax_MainMessageID", IDСообщения);
    Параметры.Вставить("GreenMax_MainMessageID", IDСообщения);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_ПолучитьСообщениеЧата(Знач Результат, Знач Вариант, IDСообщения = "")

    ОжидаетЧто(Результат["idMessage"]).Равно(IDСообщения);
    ОжидаетЧто(Результат["chatId"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_ПолучитьЖурналВходящихСообщений(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_ПолучитьЖурналИсходящихСообщений(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_ПолучитьКоличествоСообщенийКОтправке(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["count"]).ИмеетТип("Число");

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_ПолучитьОчередьСообщенийКОтправке(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_ОчиститьОчередьСообщенийКОтправке(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["isCleared"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_ПолучитьКоличествоВходящихУведомлений(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["count"]).ИмеетТип("Число");

    Возврат Результат;

КонецФункции

Функция Проверка_GreenMax_ОчиститьОчередьВходящихУведомлений(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["isCleared"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_Расширенная_ВыполнитьКомандуБезПодключения(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(СтрНайти(нРег(Результат["error"]), "not connected") > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_Расширенная_ПодключениеБезСтроки(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(СтрНайти(нРег(Результат["error"]), "empty connection") > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_Расширенная_ПовторноеПодключение(Знач Результат, Знач Вариант)

    ТекстОшибки = нРег(Результат["error"]);
    ЭтоПовтор   = СтрНайти(ТекстОшибки, "already") > 0
        Или СтрНайти(ТекстОшибки, "initialized") > 0
        Или СтрНайти(ТекстОшибки, "connected") > 0;

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(ЭтоПовтор).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_Расширенная_ПолучитьЛогПриПодключении(Знач Результат, Знач Вариант, ФайлЛога = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["logs"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["logs"].Количество() > 0).Равно(Истина);

    ОбъектЛога = Новый Файл(ФайлЛога);
    ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
    ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_СформироватьСтрокуПодключения(Знач Результат, Знач Вариант, Параметры = "")

    Адрес  = "127.0.0.1:1234";
    Логин  = Параметры["MongoDB_User"];
    Пароль = Параметры["MongoDB_Password"];
    База   = Параметры["MongoDB_DB"];

    ШаблонСтроки   = "mongodb://%1:" + "%2@%3/%4?authSource=admin";
    СтрокаПроверки = СтрШаблон(ШаблонСтроки, Логин, Пароль, Адрес, База);
    СтрокаВозврата = СтрШаблон(ШаблонСтроки, Логин, "***", Адрес, База);
    ОжидаетЧто(СтрокаПроверки).Равно(Результат);

    Возврат СтрокаВозврата;

КонецФункции

Функция Проверка_MongoDB_ОткрытьСоединение(Знач Результат, Знач Вариант)

    Если Вариант = "Закрытие" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    Иначе
        Результат = Строка(ТипЗнч(Результат));
        ОжидаетЧто(Результат).Равно("AddIn.OPI_MongoDB.Main");
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_ЗакрытьСоединение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_ЭтоКоннектор(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_ВыполнитьКоманду(Знач Результат, Знач Вариант)

    Если Вариант = "Подключение" Тогда
        Результат = Строка(ТипЗнч(Результат));
        ОжидаетЧто(Результат).Равно("AddIn.OPI_MongoDB.Main");
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_ПолучитьНастройкиЛогирования(Знач Результат, Знач Вариант)

    Если Вариант = "Файл" Тогда

        ОжидаетЧто(Результат["mode"]).Равно("file");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["file_path"])).Равно(Истина);

    ИначеЕсли Вариант = "Память" Тогда

        ОжидаетЧто(Результат["mode"]).Равно("memory");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["max_entries"])).Равно(Истина);

    Иначе

        ОжидаетЧто(Результат["mode"]).Равно("both");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["file_path"])).Равно(Истина);
        ОжидаетЧто(ЗначениеЗаполнено(Результат["max_entries"])).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_ПолучитьЛог(Знач Результат, Знач Вариант, ФайлЛога = "")

    Если Вариант = "КакСтрока" Тогда

        ОжидаетЧто(ТипЗнч(Результат)).Равно(Тип("Строка"));
        ОжидаетЧто(СтрДлина(Результат) > 0).Равно(Истина);

        ОбъектЛога = Новый Файл(ФайлЛога);
        ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
        ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    Иначе

        ОжидаетЧто(Результат["result"]).Равно(Истина);

        ОжидаетЧто(Результат["logs"]).ИмеетТип("Массив");
        ОжидаетЧто(Результат["logs"].Количество() > 0).Равно(Истина);

        ОбъектЛога = Новый Файл(ФайлЛога);
        ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
        ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_ПолучитьБазуДанных(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["data"]["ok"]).Равно(1);
    ОжидаетЧто(Результат["data"]["db"]).Равно("test_db");

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_ПолучитьСписокБаз(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["data"]["databases"]).ИмеетТип("Массив").Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_СоздатьКоллекцию(Знач Результат, Знач Вариант)

    Если Вариант = "Существующая" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
        ОжидаетЧто(СтрНайти(Результат["error"], "already exists") > 0).Равно(Истина);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["data"]["ok"]).Равно(1);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_УдалитьКоллекцию(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["data"]["ok"]).Равно(1);
    ОжидаетЧто(Результат["data"]["ns"]).Равно("test_database.test_collection");

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_ПолучитьСписокКоллекций(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["data"]["ok"]).Равно(1);

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_ВставитьДокументы(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["data"]["ok"]).Равно(1);
    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_ПолучитьДокументы(Знач Результат, Знач Вариант)

    Если Не ЗначениеЗаполнено(Вариант) Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["data"].Количество() > 0).Равно(Истина);
        ОжидаетЧто(Результат["data"][0]["stringField"]).Равно("Текст");

    ИначеЕсли Вариант = 1 Тогда
        // Фильтрация по категории и диапазону цен
        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["data"].Количество() > 0).Равно(Истина);

        Для Каждого Документ Из Результат["data"] Цикл
            ОжидаетЧто(Документ["category"]).Равно("электроника");
            ОжидаетЧто(Документ["price"] >= 100).Равно(Истина);
            ОжидаетЧто(Документ["price"] <= 400).Равно(Истина);
        КонецЦикла;

        Если Результат["data"].Количество() > 1 Тогда
            ОжидаетЧто(Результат["data"][0]["price"] <= Результат["data"][1]["price"]).Равно(Истина);
        КонецЕсли;

    ИначеЕсли Вариант = 2 Тогда
        ОжидаетЧто(Результат["result"]).Равно(Истина);

        Для Каждого Документ Из Результат["data"] Цикл
            ОжидаетЧто(Документ["inStock"]).Равно(Истина);
            ОжидаетЧто(Документ["rating"] >= 4).Равно(Истина);
        КонецЦикла;

        Если Результат["data"].Количество() > 1 Тогда
            ОжидаетЧто(Результат["data"][0]["rating"] >= Результат["data"][1]["rating"]).Равно(Истина);
        КонецЕсли;

    ИначеЕсли Вариант = 3 Тогда
        ОжидаетЧто(Результат["result"]).Равно(Истина);

        Для Каждого Документ Из Результат["data"] Цикл

            Найден         = Ложь;
            Для Каждого Тэг Из Документ["tags"] Цикл
                Если СтрНайти(Тэг, "распродажа") > 0 Тогда
                    Найден = Истина;
                    Прервать;
                КонецЕсли;
            КонецЦикла;

            ОжидаетЧто(Найден).Равно(Истина);

        КонецЦикла;

    ИначеЕсли Вариант = 4 Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);

        Для Каждого Документ Из Результат["data"] Цикл
            ОжидаетЧто(Документ["details"]["supplier"]).Равно("Поставщик А");
            ОжидаетЧто(Документ["details"]["weightKg"] < 3).Равно(Истина);
        КонецЦикла;

    ИначеЕсли Вариант = 5 Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);

        Для Каждого Документ Из Результат["data"] Цикл
            ОжидаетЧто(Документ["productName"] = Неопределено).Равно(Ложь);
            ОжидаетЧто(Документ["price"]       = Неопределено).Равно(Ложь);
            ОжидаетЧто(Документ["rating"]      = Неопределено).Равно(Ложь);
            ОжидаетЧто(Документ["category"]).Равно(Неопределено);
            ОжидаетЧто(Документ["inStock"]).Равно(Неопределено);
            ОжидаетЧто(Документ["details"]).Равно(Неопределено);
        КонецЦикла;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_ПолучитьКурсор(Знач Результат, Знач Вариант)

    Если Не ЗначениеЗаполнено(Вариант) Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["data"]["cursor"]["firstBatch"].Количество()).Равно(1);
        ОжидаетЧто(Результат["data"]["cursor"]["id"] > 0).Равно(Истина);

    ИначеЕсли Вариант = 1 Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["data"]["cursor"]["firstBatch"].Количество() <= 3).Равно(Истина);

        Для Каждого Документ Из Результат["data"]["cursor"]["firstBatch"] Цикл
            ОжидаетЧто(Документ["inStock"]).Равно(Истина);
        КонецЦикла;

    ИначеЕсли Вариант = 2 Тогда

        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["data"]["cursor"]["firstBatch"].Количество() <= 2).Равно(Истина);

        Для Каждого Документ Из Результат["data"]["cursor"]["firstBatch"] Цикл
            ОжидаетЧто(Документ["category"]).Равно("одежда");
        КонецЦикла;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_ПолучитьПакетДокументов(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_ОбновитьДокументы(Знач Результат, Знач Вариант)

    Вариант = Строка(Вариант);

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если Вариант = "Проверка" Тогда

        ОжидаетЧто(Результат["data"].Количество() > 0).Равно(Истина);
        ОжидаетЧто(Результат["data"][0]["doubleField"]).Равно(999);

    ИначеЕсли Вариант = "Проверка 1" Тогда

        ОжидаетЧто(Результат["data"].Количество() > 0).Равно(Истина);

        Для Каждого Док Из Результат["data"] Цикл

            ОжидаетЧто(Док["price"]).Равно(777);
            ОжидаетЧто(Док["inStock"]).Равно(Ложь);
            ОжидаетЧто(Док["rating"]).Равно(5);

        КонецЦикла;

    ИначеЕсли Вариант = "Проверка 2" Тогда

        ОжидаетЧто(Результат["data"].Количество() > 0).Равно(Истина);
        ОжидаетЧто(Результат["data"][0]["quantity"] > 10).Равно(Истина);

    ИначеЕсли Вариант = "Проверка 3" Тогда

        ОжидаетЧто(Результат["data"].Количество() > 0).Равно(Истина);

        Для Каждого Док Из Результат["data"] Цикл

            Найден = Ложь;

            Для Каждого Тэг Из Док["tags"] Цикл
                Если Тэг = "обновленный" Тогда
                    Найден = Истина;
                    Прервать;
                КонецЕсли;
            КонецЦикла;

            ОжидаетЧто(Найден).Равно(Истина);

        КонецЦикла;

    ИначеЕсли Вариант = "Проверка 4" Тогда

        ОжидаетЧто(Результат["data"].Количество() > 0).Равно(Истина);

        Для Каждого Док Из Результат["data"] Цикл

            ОжидаетЧто(Док["details"]["supplier"]).Равно("Поставщик А+");
            ОжидаетЧто(Док["details"]["weightKg"]).Равно(2.5);

        КонецЦикла;

    ИначеЕсли Вариант = "Проверка 5" Тогда

        ОжидаетЧто(Результат["data"].Количество() > 0).Равно(Истина);
        ОжидаетЧто(Результат["data"][0]["productName"]).Равно("Новый товар");
        ОжидаетЧто(Результат["data"][0]["price"]).Равно(1999);

    ИначеЕсли Вариант = "Проверка 6" Тогда

        ОжидаетЧто(Результат["data"].Количество() > 0).Равно(Истина);

        Для Каждого Док Из Результат["data"] Цикл
            ОжидаетЧто(Док["rating"]).Равно(Неопределено);
        КонецЦикла;

    ИначеЕсли Вариант = "Проверка 7" Тогда

        ОжидаетЧто(Результат["data"].Количество() > 0).Равно(Истина);

        Для Каждого Док Из Результат["data"] Цикл

            ОжидаетЧто(Док["inStock"]).Равно(Ложь);

            Найден = Ложь;

            Для Каждого Тэг Из Док["tags"] Цикл
                Если Тэг = "уценка" Тогда
                    Найден = Истина;
                    Прервать;
                КонецЕсли;
            КонецЦикла;

            ОжидаетЧто(Найден).Равно(Истина);

        КонецЦикла;

    ИначеЕсли Вариант = "Проверка 8_1" Тогда

        ОжидаетЧто(Результат["data"].Количество() > 0).Равно(Истина);

        Для Каждого Док Из Результат["data"] Цикл

            ОжидаетЧто(Док["price"]).Равно(888);
            ОжидаетЧто(Док["discounted"]).Равно(Истина);

        КонецЦикла;

    ИначеЕсли Вариант = "Проверка 8_2" Тогда

        ОжидаетЧто(Результат["data"].Количество() > 0).Равно(Истина);

        Для Каждого Док Из Результат["data"] Цикл

            Найден = Ложь;

            Для Каждого Тэг Из Док["tags"] Цикл
                Если Тэг = "массовое_обновление" Тогда
                    Найден = Истина;
                    Прервать;
                КонецЕсли;
            КонецЦикла;

            ОжидаетЧто(Найден).Равно(Истина);

        КонецЦикла;

    ИначеЕсли Вариант = "Проверка 8_3" Тогда

        ОжидаетЧто(Результат["data"].Количество() > 0).Равно(Истина);
        ОжидаетЧто(Результат["data"][0]["productName"]).Равно("Специальный товар из массива");
        ОжидаетЧто(Результат["data"][0]["price"]).Равно(1111);

    ИначеЕсли Вариант = "Проверка 8_4" Тогда

        ОжидаетЧто(Результат["data"].Количество() > 0).Равно(Истина);
        Для Каждого Док Из Результат["data"] Цикл
            ОжидаетЧто(Док["needsImprovement"]).Равно(Истина);
        КонецЦикла;

    ИначеЕсли Вариант = "Получение" Тогда

        ОжидаетЧто(Результат["data"].Количество()).Равно(0);

    ИначеЕсли Вариант = "Получение новых" Тогда

        Для Каждого Элемент Из Результат["data"] Цикл
            ОжидаетЧто(Элемент["doubleField"]).Равно(999);
        КонецЦикла;

    ИначеЕсли Вариант = "5" Тогда

        ОжидаетЧто(Результат["data"]["upserted"].Количество() > 0 Или Результат["data"]["nModified"] > 0).Равно(Истина);

    Иначе
        ОжидаетЧто(Результат["data"]["nModified"] > 0).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_ПолучитьСтруктуруОбновленияДокументов(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_УдалитьДокументы(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если Вариант = "Проверка" Тогда
        ОжидаетЧто(Результат["data"].Количество()).Равно(1);
    ИначеЕсли Вариант = "Предпроверка" Тогда
        ОжидаетЧто(Результат["data"].Количество()).Равно(2);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_СоздатьПользователя(Знач Результат, Знач Вариант)

    Если Вариант = "Существующий" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_ИзменитьПользователя(Знач Результат, Знач Вариант)

    Если Вариант = "Несуществующий" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_УдалитьПользователя(Знач Результат, Знач Вариант)

    Если Вариант = "Повторно" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_ПолучитьПользователей(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если Не ЗначениеЗаполнено(Вариант) Тогда
        ОжидаетЧто(Результат["data"].Количество()).Равно(2);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_ПолучитьПользователейБазы(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["data"]["users"].Количество()).Равно(1);

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_УдалитьБазуДанных(Знач Результат, Знач Вариант)

    Если Вариант = "Несуществующая" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_СоздатьРоль(Знач Результат, Знач Вариант)

    Если Вариант = "Существующий" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_ИзменитьРоль(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_УдалитьРоль(Знач Результат, Знач Вариант)

    Если Вариант = "Повторно" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_НазначитьРоли(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_СнятьРоли(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_ПолучитьРоли(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["data"]["roles"].Количество()).Равно(1);

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_ПолучитьСтруктуруПривилегииРоли(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_MongoDB_ПолучитьСтруктуруУдаленияДокументов(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GRPC_Расширенная_ВызватьМетодБезПодключения(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ТекстОшибки = нРег(Результат["error"]);
    ЭтоОшибка   = СтрНайти(ТекстОшибки, "not connected") > 0
        Или СтрНайти(ТекстОшибки, "connection not initialized") > 0;

    ОжидаетЧто(ЭтоОшибка).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GRPC_Расширенная_ПодключениеБезАдреса(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(СтрНайти(нРег(Результат["error"]), "empty server") > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GRPC_Расширенная_ПовторноеПодключение(Знач Результат, Знач Вариант)

    ТекстОшибки = нРег(Результат["error"]);
    ЭтоПовтор   = СтрНайти(ТекстОшибки, "already") > 0
        Или СтрНайти(ТекстОшибки, "initialized") > 0
        Или СтрНайти(ТекстОшибки, "connected") > 0;

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(ЭтоПовтор).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GRPC_Расширенная_ВызватьМетодНесколькоБинарныхПолей(Знач Результат, Знач Вариант, ОтправленныеДанные = Неопределено)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    ДанныеОтвета = Результат["data"];

    ОжидаетЧто(ДанныеОтвета["f_string"]).Равно(ОтправленныеДанные["f_string"]);
    ОжидаетЧто(ДанныеОтвета["f_int32"]).Равно(ОтправленныеДанные["f_int32"]);
    ОжидаетЧто(ДанныеОтвета["f_bool"]).Равно(ОтправленныеДанные["f_bool"]);

    ПроверитьДвоичныеДанныеJanx(ДанныеОтвета["f_bytes"], ОтправленныеДанные["f_bytes"]);

    ОжидаемыйМассив   = ОтправленныеДанные["f_bytess"];
    ФактическийМассив = ДанныеОтвета["f_bytess"];

    ОжидаетЧто(ФактическийМассив.Количество()).Равно(ОжидаемыйМассив.Количество());

    Для Индекс = 0 По ОжидаемыйМассив.ВГраница() Цикл
        ПроверитьДвоичныеДанныеJanx(ФактическийМассив[Индекс], ОжидаемыйМассив[Индекс]);
    КонецЦикла;

    Возврат Результат;

КонецФункции

Функция Проверка_GRPC_Расширенная_ПолучитьЛогПриПодключении(Знач Результат, Знач Вариант, ФайлЛога = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["logs"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["logs"].Количество() > 0).Равно(Истина);

    ОбъектЛога = Новый Файл(ФайлЛога);
    ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
    ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GRPC_ОткрытьСоединение(Знач Результат, Знач Вариант)

    Если Вариант = "Закрытие" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    ИначеЕсли Вариант = "Ошибка" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
    Иначе
        Результат = Строка(ТипЗнч(Результат));
        ОжидаетЧто(Результат).Равно("AddIn.OPI_GRPC.Main");
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GRPC_ЗакрытьСоединение(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GRPC_ЭтоКоннектор(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GRPC_ПолучитьПараметрыСоединения(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GRPC_ПолучитьНастройкиTls(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GRPC_ПолучитьСписокСервисов(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["data"].Количество()).Равно(1);
    Возврат Результат;

КонецФункции

Функция Проверка_GRPC_ПолучитьСписокМетодов(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["data"].Количество() > 3).Равно(Истина);
    Возврат Результат;

КонецФункции

Функция Проверка_GRPC_ПолучитьМетод(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    Возврат Результат;

КонецФункции

Функция Проверка_GRPC_ВызватьМетод(Знач Результат, Знач Вариант, Данные = Неопределено)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если Вариант = "Мета" Тогда

        РезультатСтрокой = OPI_Инструменты.JSONСтрокой(Результат);
        ОжидаетЧто(СтрНайти(РезультатСтрокой, "somekey") > 0).Равно(Истина);

    ИначеЕсли Вариант = "Мета 2" Тогда

        РезультатСтрокой                                 = OPI_Инструменты.JSONСтрокой(Результат);
        ОжидаетЧто(СтрНайти(РезультатСтрокой, "somekey") = 0).Равно(Истина);
        ОжидаетЧто(СтрНайти(РезультатСтрокой, "anotherkey") > 0).Равно(Истина);

    ИначеЕсли Вариант = "Пустой" Или Вариант = "Select" Тогда
        // Только успешный unary без сравнения тела ответа

    ИначеЕсли OPI_Инструменты.ЭтоКоллекция(Данные, Истина) Тогда

        ДанныеОтвета  = Результат["data"];
        Исключаемые   = СтрРазделить("f_bytes,f_bytess,f_float", ",");
        ОжидаетЧто(OPI_Инструменты.СравнитьДвеКоллекции(ДанныеОтвета, Данные, Исключаемые)).Равно(Истина);
        ОжидаетЧто(Лев(Строка(ДанныеОтвета["f_float"]), 4)).Равно(Лев(Строка(Данные["f_float"]), 4));
        ПроверитьДвоичныеДанныеJanx(ДанныеОтвета["f_bytes"], Данные["f_bytes"]);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GRPC_УстановитьМетаданные(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Если Вариант = "Проверка" Тогда

        РезультатСтрокой = OPI_Инструменты.JSONСтрокой(Результат);
        ОжидаетЧто(СтрНайти(РезультатСтрокой, "somekey") > 0).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GRPC_ИнициализироватьСерверныйПоток(Знач Результат, Знач Вариант)

    Если Вариант = "Массив" Тогда
        ОжидаетЧто(Результат.Количество() > 0).Равно(Истина);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GRPC_ИнициализироватьКлиентскийПоток(Знач Результат, Знач Вариант, ЧислоОтправок = Неопределено)

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(ЧислоОтправок).Равно(10);

    Возврат Результат;

КонецФункции

Функция Проверка_GRPC_ИнициализироватьДвунаправленныйПоток(Знач Результат, Знач Вариант, МассивРезультатов = Неопределено)

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(МассивРезультатов.Количество()).Равно(10);

    Для Н = 0 По МассивРезультатов.Количество() - 1 Цикл
        ОжидаетЧто(МассивРезультатов[Н]["f_int32"]).Равно(Н + 1);
    КонецЦикла;

    Возврат Результат;

КонецФункции

Функция Проверка_GRPC_ОтправитьСообщение(Знач Результат, Знач Вариант, Закрытие = Неопределено)

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Закрытие["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GRPC_ПолучитьСообщение(Знач Результат, Знач Вариант, Закрытие = Неопределено, Данные = Неопределено)

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Закрытие["result"]).Равно(Истина);

    СписокПолей = СтрРазделить("f_bytes,f_bytess,f_float", ",");
    ОжидаетЧто(Лев(Строка(Результат["message"]["f_float"])              , 4)).Равно(Лев(Строка(Данные["f_float"]), 4));
    ОжидаетЧто(OPI_Инструменты.СравнитьДвеКоллекции(Результат["message"], Данные                                 , СписокПолей)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_GRPC_ЗакрытьПоток(Знач Результат, Знач Вариант)

    Если Вариант = "Отправка" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GRPC_ОбработатьСерверныйПоток(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["data"].Количество()).Равно(3);

    Возврат Результат;

КонецФункции

Функция Проверка_GRPC_ОбработатьКлиентскийПоток(Знач Результат, Знач Вариант)

    Если Вариант = "Ошибка" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GRPC_ОбработатьДвунаправленныйПоток(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["data"].Количество()).Равно(10);

    Возврат Результат;

КонецФункции

Функция Проверка_GRPC_ПолучитьНастройкиЛогирования(Знач Результат, Знач Вариант)

    Если Вариант = "Файл" Тогда

        ОжидаетЧто(Результат["mode"]).Равно("file");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["file_path"])).Равно(Истина);

    ИначеЕсли Вариант = "Память" Тогда

        ОжидаетЧто(Результат["mode"]).Равно("memory");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["max_entries"])).Равно(Истина);

    Иначе

        ОжидаетЧто(Результат["mode"]).Равно("both");
        ОжидаетЧто(ЗначениеЗаполнено(Результат["file_path"])).Равно(Истина);
        ОжидаетЧто(ЗначениеЗаполнено(Результат["max_entries"])).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GRPC_ПолучитьЛог(Знач Результат, Знач Вариант, ФайлЛога = "")

    Если Вариант = "КакСтрока" Тогда

        ОжидаетЧто(ТипЗнч(Результат)).Равно(Тип("Строка"));
        ОжидаетЧто(СтрДлина(Результат) > 0).Равно(Истина);

        ОбъектЛога = Новый Файл(ФайлЛога);
        ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
        ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    Иначе

        ОжидаетЧто(Результат["result"]).Равно(Истина);

        ОжидаетЧто(Результат["logs"]).ИмеетТип("Массив");
        ОжидаетЧто(Результат["logs"].Количество() > 0).Равно(Истина);

        ОбъектЛога = Новый Файл(ФайлЛога);
        ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
        ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_GRPC_ЗавершитьОтправку(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_ClickHouse_ВыполнитьЗапрос(Знач Результат, Знач Вариант)

    Если ТипЗнч(Результат["body"]) = Тип("ДвоичныеДанные") Тогда
        Результат.Вставить("body", ПолучитьСтрокуИзДвоичныхДанных(Результат["body"]));
    КонецЕсли;

    Если Вариант = "СозданиеТаблицы" Или Вариант = "ВставкаДанных" Тогда

        ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["status"]).Равно(200);

    ИначеЕсли Вариант = "ВыборкаJSON" Или Вариант = "ВыборкаJSONCompact" Тогда

        ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["status"]).Равно(200);
        ОжидаетЧто(Результат["body"]).ИмеетТип("Соответствие");

    ИначеЕсли Вариант = "ВыборкаCSV" Или Вариант = "ВыборкаTSV" Тогда

        ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["status"]).Равно(200);
        ОжидаетЧто(Результат["body"]).ИмеетТип("Строка");

    ИначеЕсли Вариант = "ВнешняяТаблица" Тогда

        ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["body"]).ИмеетТип("Соответствие");
        ОжидаетЧто(Результат["body"]["rows"]).Равно(2);

    ИначеЕсли Вариант = "ДопНастройки" Тогда

        ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["body"]).ИмеетТип("Соответствие");

    ИначеЕсли Вариант = "СессияСоздание" Или Вариант = "СессияВставка" Тогда

        ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["status"]).Равно(200);

    Иначе

        // Основной вариант - выборка из временной таблицы сессии
        ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(Результат["body"]).ИмеетТип("Соответствие");
        ОжидаетЧто(Результат["body"]["rows"]).Равно(2);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_ClickHouse_ОткрытьСоединениеGRPC(Знач Результат, Знач Вариант)

    Если Вариант = "Открытие" Тогда

        Результат = Строка(ТипЗнч(Результат));
        ОжидаетЧто(Результат).Равно("AddIn.OPI_GRPC.Main");

    ИначеЕсли Вариант = "СозданиеТаблицы" Или Вариант = "ВставкаДанных" Тогда

        ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
        ОжидаетЧто(Результат["result"]).Равно(Истина);

    ИначеЕсли Вариант = "Выборка" Тогда

        ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
        ОжидаетЧто(Результат["result"]).Равно(Истина);

    Иначе

        ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
        ОжидаетЧто(Результат["result"]).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_ClickHouse_ПолучитьНастройкиСоединенияHTTP(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    ОжидаетЧто(OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "address")).Равно(Истина);
    ОжидаетЧто(OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "transport")).Равно(Истина);
    ОжидаетЧто(Результат["transport"]).Равно("http");

    Если Вариант = "БезАвторизации" Тогда

        ОжидаетЧто(OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "auth_type")).Равно(Ложь);

    ИначеЕсли Вариант = "BasicАвторизация" Тогда

        ОжидаетЧто(Результат["auth_type"]).Равно("basic");
        ОжидаетЧто(OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "user")).Равно(Истина);
        ОжидаетЧто(OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "password")).Равно(Истина);

    ИначеЕсли Вариант = "JWTАвторизация" Тогда

        ОжидаетЧто(Результат["auth_type"]).Равно("jwt");
        ОжидаетЧто(OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "token")).Равно(Истина);

    ИначеЕсли Не ЗначениеЗаполнено(Вариант) Тогда

        ОжидаетЧто(OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "headers")).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_ClickHouse_ПолучитьНастройкиСоединенияGRPC(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат           , Истина)).Равно(Истина);
    ОжидаетЧто(OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "address")).Равно(Истина);
    ОжидаетЧто(OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "transport")).Равно(Истина);
    ОжидаетЧто(Результат["transport"]).Равно("grpc");

    Если Вариант = "БезАвторизации" Тогда

        ОжидаетЧто(OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "auth_type")).Равно(Ложь);

    ИначеЕсли Вариант = "BasicАвторизация" Тогда

        ОжидаетЧто(Результат["auth_type"]).Равно("basic");
        ОжидаетЧто(OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "user")).Равно(Истина);
        ОжидаетЧто(OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "password")).Равно(Истина);

    ИначеЕсли Вариант = "JWTАвторизация" Тогда

        ОжидаетЧто(Результат["auth_type"]).Равно("jwt");
        ОжидаетЧто(OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "token")).Равно(Истина);

    ИначеЕсли Вариант = "СМетаданными" Тогда

        ОжидаетЧто(OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "metadata")).Равно(Истина);

    ИначеЕсли Не ЗначениеЗаполнено(Вариант) Тогда

        ОжидаетЧто(OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "tls")).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_ClickHouse_ПолучитьНастройкиЗапроса(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат           , Истина)).Равно(Истина);
    ОжидаетЧто(OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "query")).Равно(Истина);

    Если Вариант = "Минимальный" Тогда

        ОжидаетЧто(Результат["query"]).Равно("SELECT 1");

    Иначе

        ОжидаетЧто(Результат["database"]).Равно("default");
        ОжидаетЧто(Результат["id"]).Заполнено();
        ОжидаетЧто(OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "data")).Равно(Истина);
        ОжидаетЧто(Результат["format"]).Равно("CSV");
        ОжидаетЧто(OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "external_tables")).Равно(Истина);
        ОжидаетЧто(Результат["external_tables"]).ИмеетТип("Массив");
        ОжидаетЧто(OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "settings")).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_ClickHouse_ПолучитьСтруктуруВнешнейТаблицы(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат           , Истина)).Равно(Истина);
    ОжидаетЧто(OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "name")).Равно(Истина);
    ОжидаетЧто(OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "cols")).Равно(Истина);
    ОжидаетЧто(Результат["name"]).Равно("external_data");

    Если Вариант = "Минимальная" Тогда

        ОжидаетЧто(OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "data")).Равно(Ложь);

    ИначеЕсли Вариант = "TSV" Или Не ЗначениеЗаполнено(Вариант) Тогда

        ОжидаетЧто(Результат["format"]).Равно("TSV");
        ОжидаетЧто(OPI_Инструменты.ПолеКоллекцииСуществует(Результат, "data")).Равно(Истина);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_ClickHouse_ПолучитьНастройкиСессии(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);
    ОжидаетЧто(Результат["id"]).ИмеетТип("Строка").Заполнено();
    ОжидаетЧто(Результат["check"]).Равно(Истина);
    ОжидаетЧто(Результат["timeout"]).Равно(120);

    Возврат Результат;

КонецФункции

Функция Проверка_ClickHouse_ПолучитьНастройкиTls(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_ClickHouse_ОткрытьПотокGRPC(Знач Результат, Знач Вариант)

    Если Вариант = "Финал" Тогда

        ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);
        ОжидаетЧто(Результат["result"]).Равно(Истина);

    ИначеЕсли Вариант = "Выборка" Тогда

        ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);
        ОжидаетЧто(Результат["result"]).Равно(Истина);

        ТелоОтвета = Результат["data"]["output"];
        ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(ТелоОтвета           , Истина)).Равно(Истина);
        ОжидаетЧто(OPI_Инструменты.ПолеКоллекцииСуществует(ТелоОтвета, "data")).Равно(Истина);

        Данные = ТелоОтвета["data"];
        ОжидаетЧто(ТипЗнч(Данные)).Равно(Тип("Массив"));
        ОжидаетЧто(Данные.Количество()).Равно(5);

        Для Счетчик = 0 По 4 Цикл
            Запись = Данные[Счетчик];
            ОжидаетЧто(Запись["id"]).Равно(Строка(Счетчик + 1));
            ОжидаетЧто(Запись["user_id"]).Равно(100 + Счетчик);
            ОжидаетЧто(Запись["event_type"]).Равно("stream_test");
        КонецЦикла;

    Иначе
        ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);
        ОжидаетЧто(Результат["result"]).Равно(Истина);
        ОжидаетЧто(ЗначениеЗаполнено(Результат["streamId"])).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_ClickHouse_ОтправитьСообщениеGRPC(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);
    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_ClickHouse_ОтправитьДанныеGRPC(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);
    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_ClickHouse_ПолучитьСообщениеGRPC(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    ОжидаетЧто(Результат["rows"]).Равно(1);
    ОжидаетЧто(ЗначениеЗаполнено(Результат["data"])).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_ClickHouse_ЗавершитьОтправкуGRPC(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Если Вариант = "Отправка" Тогда
        ОжидаетЧто(Результат["result"]).Равно(Ложь);
    Иначе
        ОжидаетЧто(Результат["result"]).Равно(Истина);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_ClickHouse_ЗакрытьПотокGRPC(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);
    ОжидаетЧто(Результат["result"]).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_ClickHouse_ОбработатьОтправкуGRPC(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);
    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["data_sending"].Количество()).Равно(4);
    ОжидаетЧто(Результат["received_message"]["message"]["exception"]["code"]).Равно(0);

    Возврат Результат;

КонецФункции

Функция Проверка_ClickHouse_ОбработатьПолучениеGRPC(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);
    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["messages"].Количество() > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_RSS_СоздатьФидRSS(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(ТипЗнч(Результат)).Равно(Тип("Строка"));
    ОжидаетЧто(Результат).Заполнено();
    ОжидаетЧто(СтрНайти(Результат, "<?xml") > 0).Равно(Истина);
    ОжидаетЧто(СтрНайти(Результат, "<rss") > 0).Равно(Истина);
    ОжидаетЧто(СтрНайти(Результат, "<channel>") > 0).Равно(Истина);
    ОжидаетЧто(СтрНайти(Результат, "<item>") > 0).Равно(Истина);

    ИВФ = ПолучитьИмяВременногоФайла("xml");
    ПолучитьДвоичныеДанныеИзСтроки(Результат).Записать(ИВФ);

    ЗаписатьПараметр("RSS_FeedXML", ИВФ);
    Параметры.Вставить("RSS_FeedXML", ИВФ);

    Возврат Результат;

КонецФункции

Функция Проверка_RSS_ПолучитьСтруктуруЭлементаФидаRSS(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Если Вариант = "Пустая" Тогда
        ОжидаетЧто(Результат["title"]).Равно("");
        ОжидаетЧто(Результат["description"]).Равно("");
        ОжидаетЧто(Результат["link"]).Равно("");
    ИначеЕсли Вариант = "Соответствие" Тогда
        ОжидаетЧто(ТипЗнч(Результат)).Равно(Тип("Соответствие"));
    Иначе
        ОжидаетЧто(Результат["title"]).Заполнено();
        ОжидаетЧто(Результат["description"]).Заполнено();
        ОжидаетЧто(Результат["link"]).Заполнено();
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_RSS_РазобратьФидRSS(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);
    ОжидаетЧто(Результат["title"]).Заполнено();
    ОжидаетЧто(Результат["description"]).Заполнено();
    ОжидаетЧто(Результат["link"]).Заполнено();
    ОжидаетЧто(Результат["items"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["items"].Количество() > 0).Равно(Истина);

    ПервыйЭлемент = Результат["items"][0];
    ОжидаетЧто(ПервыйЭлемент["title"]).Заполнено();
    ОжидаетЧто(ПервыйЭлемент["description"]).Заполнено();
    ОжидаетЧто(ПервыйЭлемент["link"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_RSS_СоздатьФидAtom(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(ТипЗнч(Результат)).Равно(Тип("Строка"));
    ОжидаетЧто(Результат).Заполнено();
    ОжидаетЧто(СтрНайти(Результат, "<?xml") > 0).Равно(Истина);
    ОжидаетЧто(СтрНайти(Результат, "<feed") > 0).Равно(Истина);
    ОжидаетЧто(СтрНайти(Результат, "xmlns=""http://www.w3.org/2005/Atom""") > 0).Равно(Истина);
    ОжидаетЧто(СтрНайти(Результат, "<entry>") > 0).Равно(Истина);

    ИВФ = ПолучитьИмяВременногоФайла("xml");
    ПолучитьДвоичныеДанныеИзСтроки(Результат).Записать(ИВФ);

    ЗаписатьПараметр("RSS_AtomFeedXML", ИВФ);
    Параметры.Вставить("RSS_AtomFeedXML", ИВФ);

    Возврат Результат;

КонецФункции

Функция Проверка_RSS_ПолучитьСтруктуруЭлементаФидаAtom(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Если Вариант = "Пустая" Тогда
        ОжидаетЧто(Результат["title"]).Равно("");
        ОжидаетЧто(Результат["id"]).Равно("");
        ОжидаетЧто(Результат["link"]).Равно("");
    ИначеЕсли Вариант = "Соответствие" Тогда
        ОжидаетЧто(ТипЗнч(Результат)).Равно(Тип("Соответствие"));
    Иначе
        ОжидаетЧто(Результат["title"]).Заполнено();
        ОжидаетЧто(Результат["id"]).Заполнено();
        ОжидаетЧто(Результат["link"]).Заполнено();
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_RSS_РазобратьФидAtom(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);
    ОжидаетЧто(Результат["title"]).Заполнено();
    ОжидаетЧто(Результат["id"]).Заполнено();
    ОжидаетЧто(Результат["link"]).Заполнено();
    ОжидаетЧто(Результат["entries"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["entries"].Количество() > 0).Равно(Истина);

    ПерваяЗапись = Результат["entries"][0];
    ОжидаетЧто(ПерваяЗапись["title"]).Заполнено();
    ОжидаетЧто(ПерваяЗапись["id"]).Заполнено();
    ОжидаетЧто(ПерваяЗапись["link"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_MessagePack_СериализоватьДанные(Знач Результат, Знач Вариант, Восстановленное = Неопределено, ИсходноеЗначение = Неопределено)

    ОжидаетЧто(ТипЗнч(Результат)).Равно(Тип("ДвоичныеДанные"));

    Hex = нРег(ПолучитьHexСтрокуИзДвоичныхДанных(Результат));

    Если Вариант = "ПустаяСтрока" Тогда

        ОжидаетЧто(Hex).Равно("a0");

    ИначеЕсли Вариант = "СтрокаFixstr" Тогда

        ОжидаетЧто(Hex).Равно("a161");

    ИначеЕсли Вариант = "СтрокаUTF8" Тогда

        ОжидаетЧто(Восстановленное).Равно("Привет");

    ИначеЕсли Вариант = "Целое0" Тогда

        ОжидаетЧто(Hex).Равно("00");

    ИначеЕсли Вариант = "Целое127" Тогда

        ОжидаетЧто(Hex).Равно("7f");

    ИначеЕсли Вариант = "Uint8" Тогда

        ОжидаетЧто(Hex).Равно("cc80");

    ИначеЕсли Вариант = "ОтрицательноеFixint" Тогда

        ОжидаетЧто(Hex).Равно("ff");

    ИначеЕсли Вариант = "Int8" Тогда

        ОжидаетЧто(Hex).Равно("d0df");

    ИначеЕсли Вариант = "Вещественное" Тогда

        ПроверитьЧислоMessagePack(Восстановленное, ИсходноеЗначение);

    ИначеЕсли Вариант = "Nil" Тогда

        ОжидаетЧто(Hex).Равно("c0");

    ИначеЕсли Вариант = "Истина" Тогда

        ОжидаетЧто(Hex).Равно("c3");

    ИначеЕсли Вариант = "Ложь" Тогда

        ОжидаетЧто(Hex).Равно("c2");

    ИначеЕсли Вариант = "ПустойБинарник" Тогда

        ОжидаетЧто(Hex).Равно("c400");

    ИначеЕсли Вариант = "БинарникBin8" Тогда

        ОжидаетЧто(Hex).Равно("c403010203");

    ИначеЕсли Вариант = "ПустойМассив" Тогда

        ОжидаетЧто(Hex).Равно("90");

    ИначеЕсли Вариант = "МассивТриЧисла" Тогда

        ОжидаетЧто(Hex).Равно("93010203");

    ИначеЕсли Вариант = "ПустаяКарта" Тогда

        ОжидаетЧто(Hex).Равно("80");

    ИначеЕсли Вариант = "КартаОднаПара" Тогда

        ОжидаетЧто(Hex).Равно("81a16101");

    ИначеЕсли Вариант = "КартаДвеПары" Тогда

        ОжидаетЧто(Восстановленное["x"]).Равно(10);
        ОжидаетЧто(Восстановленное["y"]).Равно(20);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_MessagePack_ДесериализоватьДанные(Знач Результат, Знач Вариант, ОжидаемоеЗначение = Неопределено)

    Если Вариант = "Fixint0" Тогда

        ОжидаетЧто(Результат).Равно(0);

    ИначеЕсли Вариант = "СтрокаFixstr" Тогда

        ОжидаетЧто(Результат).Равно("a");

    ИначеЕсли Вариант = "Nil" Тогда

        ОжидаетЧто(Результат = Неопределено).Равно(Истина);

    ИначеЕсли Вариант = "Истина" Тогда

        ОжидаетЧто(Результат).Равно(Истина);

    ИначеЕсли Вариант = "Ложь" Тогда

        ОжидаетЧто(Результат).Равно(Ложь);

    ИначеЕсли Вариант = "ПустойБинарник" Тогда

        ОжидаетЧто(ТипЗнч(Результат)).Равно(Тип("ДвоичныеДанные"));
        ОжидаетЧто(Результат.Размер()).Равно(0);

    ИначеЕсли Вариант = "БинарникBin8" Тогда

        ОжидаетЧто(ТипЗнч(Результат)).Равно(Тип("ДвоичныеДанные"));
        ОжидаетЧто(нРег(ПолучитьHexСтрокуИзДвоичныхДанных(Результат))).Равно("010203");

    ИначеЕсли Вариант = "ПустойМассив" Тогда

        ОжидаетЧто(ТипЗнч(Результат)).Равно(Тип("Массив"));
        ОжидаетЧто(Результат.Количество()).Равно(0);

    ИначеЕсли Вариант = "МассивТриЧисла" Тогда

        ОжидаетЧто(ТипЗнч(Результат)).Равно(Тип("Массив"));
        ОжидаетЧто(Результат.Количество()).Равно(3);
        ОжидаетЧто(Результат[0]).Равно(1);
        ОжидаетЧто(Результат[1]).Равно(2);
        ОжидаетЧто(Результат[2]).Равно(3);

    ИначеЕсли Вариант = "МассивДвеСтроки" Тогда

        ОжидаетЧто(ТипЗнч(Результат)).Равно(Тип("Массив"));
        ОжидаетЧто(Результат.Количество()).Равно(2);
        ОжидаетЧто(Результат[0]).Равно("a");
        ОжидаетЧто(Результат[1]).Равно("b");

    ИначеЕсли Вариант = "ПустаяКарта" Тогда

        ОжидаетЧто(ТипЗнч(Результат)).Равно(Тип("Соответствие"));
        ОжидаетЧто(Результат.Количество()).Равно(0);

    ИначеЕсли Вариант = "КартаОднаПара" Тогда

        ОжидаетЧто(ТипЗнч(Результат)).Равно(Тип("Соответствие"));
        ОжидаетЧто(Результат.Количество()).Равно(1);
        ОжидаетЧто(Результат["a"]).Равно(1);

    ИначеЕсли Вариант = "RoundTrip" Тогда

        Если ТипЗнч(ОжидаемоеЗначение) = Тип("Число") Тогда
            ПроверитьЧислоMessagePack(Результат, ОжидаемоеЗначение);
        ИначеЕсли ТипЗнч(ОжидаемоеЗначение) = Тип("ДвоичныеДанные") Тогда
            ПроверитьДвоичныеДанныеMessagePack(Результат, ОжидаемоеЗначение);
        ИначеЕсли ТипЗнч(ОжидаемоеЗначение) = Тип("Массив") Тогда
            ПроверитьМассивMessagePack(Результат, ОжидаемоеЗначение);
        ИначеЕсли ТипЗнч(ОжидаемоеЗначение) = Тип("Соответствие")
            Или ТипЗнч(ОжидаемоеЗначение) = Тип("Структура") Тогда
            ПроверитьКартуMessagePack(Результат, ОжидаемоеЗначение);
        Иначе
            ОжидаетЧто(Результат).Равно(ОжидаемоеЗначение);
        КонецЕсли;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Процедура ПроверитьЧислоMessagePack(Знач Фактическое, Знач Ожидаемое)

    Разница = Фактическое - Ожидаемое;

    Если Разница < 0 Тогда
        Разница = -Разница;
    КонецЕсли;

    ОжидаетЧто(Разница < 0.0000001).Равно(Истина);

КонецПроцедуры

Процедура ПроверитьДвоичныеДанныеMessagePack(Знач Фактическое, Знач Ожидаемое)

    ОжидаетЧто(ТипЗнч(Фактическое)).Равно(Тип("ДвоичныеДанные"));
    ОжидаетЧто(Фактическое.Размер()).Равно(Ожидаемое.Размер());
    ОжидаетЧто(нРег(ПолучитьHexСтрокуИзДвоичныхДанных(Фактическое))).Равно(нРег(ПолучитьHexСтрокуИзДвоичныхДанных(Ожидаемое)));

КонецПроцедуры

Процедура ПроверитьМассивMessagePack(Знач Фактическое, Знач Ожидаемое)

    ОжидаетЧто(ТипЗнч(Фактическое)).Равно(Тип("Массив"));
    ОжидаетЧто(Фактическое.Количество()).Равно(Ожидаемое.Количество());

    Для Индекс = 0 По Фактическое.ВГраница() Цикл

        ФактЭлемент = Фактическое[Индекс];
        ОжЭлемент   = Ожидаемое[Индекс];

        Если ТипЗнч(ФактЭлемент) = Тип("Число") Тогда
            ПроверитьЧислоMessagePack(ФактЭлемент, ОжЭлемент);
        ИначеЕсли ТипЗнч(ФактЭлемент) = Тип("ДвоичныеДанные") Тогда
            ПроверитьДвоичныеДанныеMessagePack(ФактЭлемент, ОжЭлемент);
        ИначеЕсли ТипЗнч(ФактЭлемент) = Тип("Массив") Тогда
            ПроверитьМассивMessagePack(ФактЭлемент, ОжЭлемент);
        ИначеЕсли ТипЗнч(ФактЭлемент) = Тип("Соответствие") Тогда
            ПроверитьКартуMessagePack(ФактЭлемент, ОжЭлемент);
        ИначеЕсли ФактЭлемент = Неопределено Тогда
            ОжидаетЧто(ОжЭлемент = Неопределено).Равно(Истина);
        Иначе
            ОжидаетЧто(ФактЭлемент).Равно(ОжЭлемент);
        КонецЕсли;

    КонецЦикла;

КонецПроцедуры

Процедура ПроверитьКартуMessagePack(Знач Фактическое, Знач Ожидаемое)

    ОжидаетЧто(ТипЗнч(Фактическое)).Равно(Тип("Соответствие"));

    КоличествоПар = 0;

    Для Каждого Пара Из Ожидаемое Цикл

        Ключ          = Строка(Пара.Ключ);
        ОжидаетЧто(КартаСодержитКлючMessagePack(Фактическое, Ключ)).Равно(Истина);
        ПроверитьЗначениеMessagePack(Фактическое[Ключ], Пара.Значение);
        КоличествоПар = КоличествоПар + 1;

    КонецЦикла;

    ОжидаетЧто(Фактическое.Количество()).Равно(КоличествоПар);

КонецПроцедуры

Функция КартаСодержитКлючMessagePack(Знач Карта, Знач Ключ)

    Для Каждого Пара Из Карта Цикл

        Если Строка(Пара.Ключ) = Ключ Тогда
            Возврат Истина;
        КонецЕсли;

    КонецЦикла;

    Возврат Ложь;

КонецФункции

Процедура ПроверитьЗначениеMessagePack(Знач Фактическое, Знач Ожидаемое)

    Если ТипЗнч(Ожидаемое) = Тип("Число") Тогда
        ПроверитьЧислоMessagePack(Фактическое, Ожидаемое);
    ИначеЕсли ТипЗнч(Ожидаемое) = Тип("ДвоичныеДанные") Тогда
        ПроверитьДвоичныеДанныеMessagePack(Фактическое, Ожидаемое);
    ИначеЕсли ТипЗнч(Ожидаемое) = Тип("Массив") Тогда
        ПроверитьМассивMessagePack(Фактическое, Ожидаемое);
    ИначеЕсли ТипЗнч(Ожидаемое) = Тип("Соответствие")
        Или ТипЗнч(Ожидаемое)  = Тип("Структура") Тогда
        ПроверитьКартуMessagePack(Фактическое, Ожидаемое);
    ИначеЕсли Ожидаемое = Неопределено Тогда
        ОжидаетЧто(Фактическое = Неопределено).Равно(Истина);
    Иначе
        ОжидаетЧто(Фактическое).Равно(Ожидаемое);
    КонецЕсли;

КонецПроцедуры

Функция Проверка_MessagePack_СовместимостьСЭталоном(Знач Результат, Знач Вариант, Исходное = Неопределено)

    Если Вариант = "Health" Тогда

        ОжидаетЧто(Результат["ok"]).Равно(Истина);
        ОжидаетЧто(Результат["port"]).Заполнено();

    ИначеЕсли Вариант = "OPIPackЭталонUnpack" Тогда

        Фактическое = ПреобразоватьЗначениеЭталонаMessagePack(Результат);
        ПроверитьЗначениеMessagePack(Фактическое, Исходное);

    ИначеЕсли Вариант = "ЭталонPackOPIUnpack" Тогда

        ПроверитьЗначениеMessagePack(Результат, Исходное);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция ПреобразоватьЗначениеЭталонаMessagePack(Знач Значение)

    Если OPI_Инструменты.ЭтоКоллекция(Значение, Истина)
        И КартаСодержитКлючMessagePack(Значение, "__msgpack_bytes__") Тогда

        Возврат Base64Значение(Значение["__msgpack_bytes__"]);

    ИначеЕсли ЭтоБуферNodeJSMessagePack(Значение) Тогда

        Возврат ДвоичныеДанныеИзБуфераNodeJSMessagePack(Значение);

    ИначеЕсли ТипЗнч(Значение) = Тип("Массив") Тогда

        Результат = Новый Массив;

        Для Каждого Элемент Из Значение Цикл
            Результат.Добавить(ПреобразоватьЗначениеЭталонаMessagePack(Элемент));
        КонецЦикла;

        Возврат Результат;

    ИначеЕсли OPI_Инструменты.ЭтоКоллекция(Значение, Истина) Тогда

        Результат = Новый Соответствие;

        Для Каждого Пара Из Значение Цикл
            Результат.Вставить(Пара.Ключ, ПреобразоватьЗначениеЭталонаMessagePack(Пара.Значение));
        КонецЦикла;

        Возврат Результат;

    Иначе

        Если Значение = Null Тогда
            Возврат Неопределено;
        КонецЕсли;

        Возврат Значение;

    КонецЕсли;

КонецФункции

Функция ЭтоБуферNodeJSMessagePack(Знач Значение)

    Если Не OPI_Инструменты.ЭтоКоллекция(Значение, Истина) Тогда
        Возврат Ложь;
    КонецЕсли;

    Если Не КартаСодержитКлючMessagePack(Значение, "type")
        Или Не КартаСодержитКлючMessagePack(Значение, "data") Тогда
        Возврат Ложь;
    КонецЕсли;

    Возврат Значение["type"]       = "Buffer"
        И ТипЗнч(Значение["data"]) = Тип("Массив");

КонецФункции

Функция ДвоичныеДанныеИзБуфераNodeJSMessagePack(Знач Значение)

    Байты = Значение["data"];
    Буфер = Новый БуферДвоичныхДанных(Байты.Количество());

    Для Индекс = 0 По Байты.Количество() - 1 Цикл
        Буфер.Установить(Индекс, Байты[Индекс]);
    КонецЦикла;

    Возврат ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(Буфер);

КонецФункции

Функция Проверка_MessagePack_Бенчмарк(Знач Результат, Знач Вариант, Исходное = Неопределено)

    ПроверитьКартуMessagePack(Результат["JsonВосстановленное"]       , Исходное);
    ПроверитьКартуMessagePack(Результат["MessagePackВосстановленное"], Исходное);

    ВывестиСлужебнуюИнформацию(
        СтрШаблон("%1 мс", Результат["JsonСериализацияМс"])
        , "JSON сериализация"
        , "MessagePack");

    ВывестиСлужебнуюИнформацию(
        СтрШаблон("%1 мс", Результат["JsonДесериализацияМс"])
        , "JSON десериализация"
        , "MessagePack");

    ВывестиСлужебнуюИнформацию(
        СтрШаблон("%1 мс", Результат["MessagePackСериализацияМс"])
        , "MessagePack сериализация"
        , "MessagePack");

    ВывестиСлужебнуюИнформацию(
        СтрШаблон("%1 мс", Результат["MessagePackДесериализацияМс"])
        , "MessagePack десериализация"
        , "MessagePack");

    ВывестиСлужебнуюИнформацию(
        СтрШаблон("JSON: %1 символов | MessagePack: %2 байт"
            , СтрДлина(Результат["JsonСтрока"])
            , Результат["MessagePackДанные"].Размер())
        , "Размер сериализованных данных"
        , "MessagePack");

    Возврат СтрШаблон(
        "JSON ser %1 ms, des %2 ms | MessagePack ser %3 ms, des %4 ms | JSON %5 chars, MP %6 bytes"
        , Результат["JsonСериализацияМс"]
        , Результат["JsonДесериализацияМс"]
        , Результат["MessagePackСериализацияМс"]
        , Результат["MessagePackДесериализацияМс"]
        , СтрДлина(Результат["JsonСтрока"])
        , Результат["MessagePackДанные"].Размер());

КонецФункции

Функция Проверка_Lua_Расширенная_ОшибкаВыполненияКода(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(ЗначениеЗаполнено(Результат["error"])).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Lua_Расширенная_ПолучитьЛогБезИнициализации(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["result"]).Равно(Ложь);
    ОжидаетЧто(СтрНайти(нРег(Результат["error"]), "logger not initialized") > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Lua_Расширенная_ПередатьСложныеДанные(Знач Результат, Знач Вариант, ИсходноеЗначение = Неопределено)

    ОжидаетЧто(Результат["alpha"]).Равно(ПолучитьСтрокуИзДвоичныхДанных(ИсходноеЗначение["alpha"], "UTF-8"));
    ОжидаетЧто(Результат["beta"]).Равно(ПолучитьСтрокуИзДвоичныхДанных(ИсходноеЗначение["beta"], "UTF-8"));
    ОжидаетЧто(Результат["gamma"]).Равно(ПолучитьСтрокуИзДвоичныхДанных(ИсходноеЗначение["gamma"], "UTF-8"));

    ОжидаетЧто(Результат["nested"]["label"]).Равно(ИсходноеЗначение["nested"]["label"]);
    ОжидаетЧто(Результат["nested"]["inner"]).Равно(ПолучитьСтрокуИзДвоичныхДанных(ИсходноеЗначение["nested"]["inner"], "UTF-8"));

    ПроверитьМассивJanx(Результат["meta"], ИсходноеЗначение["meta"]);

    Возврат Результат;

КонецФункции

Функция Проверка_Lua_Расширенная_ПередатьМассивСмешанныхТипов(Знач Результат, Знач Вариант, ИсходноеЗначение = Неопределено)

    ОжидаетЧто(ТипЗнч(Результат)).Равно(Тип("Массив"));
    ОжидаетЧто(Результат.Количество()).Равно(ИсходноеЗначение.Количество());

    ОжидаетЧто(Результат[0]).Равно(1);
    ОжидаетЧто(Результат[1]).Равно("text");
    ОжидаетЧто(Результат[2]).Равно(ПолучитьСтрокуИзДвоичныхДанных(ИсходноеЗначение[2], "UTF-8"));

    ОжидаетЧто(Результат[3]["k"]).Равно("v");
    ОжидаетЧто(Результат[3]["bin"]).Равно(ПолучитьСтрокуИзДвоичныхДанных(ИсходноеЗначение[3]["bin"], "UTF-8"));

    ОжидаетЧто(Результат[4][0]).Равно(Ложь);
    ОжидаетЧто(Результат[4][1]).Равно(ПолучитьСтрокуИзДвоичныхДанных(ИсходноеЗначение[4][1], "UTF-8"));

    Возврат Результат;

КонецФункции

Функция Проверка_Lua_Расширенная_ПолучитьЛогПриВыполнении(Знач Результат, Знач Вариант, ФайлЛога = "")

    ОжидаетЧто(Результат["result"]).Равно(Истина);
    ОжидаетЧто(Результат["logs"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["logs"].Количество() > 0).Равно(Истина);

    ОбъектЛога = Новый Файл(ФайлЛога);
    ОжидаетЧто(ОбъектЛога.Существует()).Равно(Истина);
    ОжидаетЧто(ОбъектЛога.Размер() > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Lua_СоздатьVM(Знач Результат, Знач Вариант)

    Если Вариант = "LuaJIT" Тогда
        ОжидаетЧто(Строка(ТипЗнч(Результат))).Равно("AddIn.OPI_LuaJIT.Main");
    Иначе
        ОжидаетЧто(Строка(ТипЗнч(Результат))).Равно("AddIn.OPI_Lua54.Main");
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_Lua_ЭтоVM(Знач Результат, Знач Вариант)

    Если Вариант = "Lua54" Тогда
        ОжидаетЧто(Результат).Равно(Истина);
    Иначе
        ОжидаетЧто(Результат).Равно(Ложь);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_Lua_ВыполнитьКодИзСтроки(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).Равно(42);

    Возврат Результат;

КонецФункции

Функция Проверка_Lua_ВыполнитьКодИзФайла(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).Равно(7);

    Возврат Результат;

КонецФункции

Функция Проверка_Lua_ВызватьФункцию(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).Равно(3);

    Возврат Результат;

КонецФункции

Функция Проверка_Lua_СкомпилироватьКодИзСтроки(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("ДвоичныеДанные");
    ОжидаетЧто(Результат.Размер() > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Lua_СкомпилироватьКодИзФайла(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("ДвоичныеДанные");
    ОжидаетЧто(Результат.Размер() > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_Lua_ВыполнитьБайтКод(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).Равно(11);

    Возврат Результат;

КонецФункции

Функция Проверка_Lua_ВыполнитьБайтКодФайла(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).Равно(13);

    Возврат Результат;

КонецФункции

Функция Проверка_Janx_Расширенная_КруговойОбмен(Знач Результат, Знач Вариант, Восстановленное = Неопределено, ИсходноеЗначение = Неопределено)

    ОжидаетЧто(ТипЗнч(Результат)).Равно(Тип("ДвоичныеДанные"));
    ПроверитьПрефиксJanx(Результат);

    Если ТипЗнч(ИсходноеЗначение) = Тип("Массив")
        Или СтрНайти(Вариант, "МассивСмешанный") > 0 Тогда
        ПроверитьМассивJanx(Восстановленное, ИсходноеЗначение);
    Иначе
        ПроверитьКартуJanx(Восстановленное, ИсходноеЗначение);
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_Janx_СериализоватьДанные(Знач Результат, Знач Вариант, Восстановленное = Неопределено, ИсходноеЗначение = Неопределено)

    ОжидаетЧто(ТипЗнч(Результат)).Равно(Тип("ДвоичныеДанные"));

    Если Вариант = "Строка" Тогда

        ОжидаетЧто(Восстановленное).Равно(ИсходноеЗначение);

    ИначеЕсли Вариант = "Число" Тогда

        ОжидаетЧто(Восстановленное).Равно(ИсходноеЗначение);

    ИначеЕсли Вариант = "ПустойБинарник" Тогда

        ПроверитьДвоичныеДанныеJanx(Восстановленное, ИсходноеЗначение);

    ИначеЕсли Вариант = "Бинарник" Тогда

        ПроверитьДвоичныеДанныеJanx(Восстановленное, ИсходноеЗначение);

    ИначеЕсли Вариант = "КартаСБинарником" Тогда

        ПроверитьКартуJanx(Восстановленное, ИсходноеЗначение);

    ИначеЕсли Вариант = "МассивСБинарником" Тогда

        ПроверитьМассивJanx(Восстановленное, ИсходноеЗначение);

    КонецЕсли;

    ПроверитьПрефиксJanx(Результат);

    Возврат Результат;

КонецФункции

Функция Проверка_Janx_ДесериализоватьДанные(Знач Результат, Знач Вариант, ОжидаемоеЗначение = Неопределено)

    Если Вариант = "Строка" Тогда

        ОжидаетЧто(Результат).Равно(ОжидаемоеЗначение);

    ИначеЕсли Вариант = "Бинарник" Тогда

        ПроверитьДвоичныеДанныеJanx(Результат, ОжидаемоеЗначение);

    ИначеЕсли Вариант = "КартаСБинарником" Тогда

        ПроверитьКартуJanx(Результат, ОжидаемоеЗначение);

    ИначеЕсли Вариант = "Префикс" Тогда

        ПроверитьПрефиксJanx(ОжидаемоеЗначение);

    КонецЕсли;

    Возврат Результат;

КонецФункции

Процедура ПроверитьПрефиксJanx(Знач Данные)

    Чтение = Новый ЧтениеДанных(Данные);

    ОжидаетЧто(Чтение.ПрочитатьЦелое16(ПорядокБайтов.BigEndian)).Равно(1);

    РазмерJSON = Чтение.ПрочитатьЦелое32(ПорядокБайтов.BigEndian);

    ОжидаетЧто(Чтение.ПрочитатьЦелое32(ПорядокБайтов.BigEndian) >= 0).Равно(Истина);

    Чтение.Закрыть();

    ОжидаетЧто(10 + РазмерJSON <= Данные.Размер()).Равно(Истина);

КонецПроцедуры

Процедура ПроверитьДвоичныеДанныеJanx(Знач Фактическое, Знач Ожидаемое)

    ОжидаетЧто(ТипЗнч(Фактическое)).Равно(Тип("ДвоичныеДанные"));
    ОжидаетЧто(ПолучитьHexСтрокуИзДвоичныхДанных(Фактическое)).Равно(ПолучитьHexСтрокуИзДвоичныхДанных(Ожидаемое));

КонецПроцедуры

Процедура ПроверитьМассивJanx(Знач Фактическое, Знач Ожидаемое)

    ОжидаетЧто(ТипЗнч(Фактическое)).Равно(Тип("Массив"));
    ОжидаетЧто(Фактическое.Количество()).Равно(Ожидаемое.Количество());

    Для Индекс = 0 По Ожидаемое.ВГраница() Цикл
        ПроверитьЗначениеJanx(Фактическое[Индекс], Ожидаемое[Индекс]);
    КонецЦикла;

КонецПроцедуры

Процедура ПроверитьКартуJanx(Знач Фактическое, Знач Ожидаемое)

    ОжидаетЧто(ТипЗнч(Фактическое)).Равно(Тип("Соответствие"));
    ОжидаетЧто(Фактическое.Количество()).Равно(Ожидаемое.Количество());

    Для Каждого Пара Из Ожидаемое Цикл

        Ключ = Строка(Пара.Ключ);
        ОжидаетЧто(КартаСодержитКлючJanx(Фактическое, Ключ)).Равно(Истина);
        ПроверитьЗначениеJanx(Фактическое[Ключ], Пара.Значение);

    КонецЦикла;

КонецПроцедуры

Функция КартаСодержитКлючJanx(Знач Карта, Знач Ключ)

    Для Каждого Пара Из Карта Цикл

        Если Строка(Пара.Ключ) = Ключ Тогда
            Возврат Истина;
        КонецЕсли;

    КонецЦикла;

    Возврат Ложь;

КонецФункции

Процедура ПроверитьЗначениеJanx(Знач Фактическое, Знач Ожидаемое)

    Если ТипЗнч(Ожидаемое) = Тип("Число") Тогда
        ПроверитьЧислоJanx(Фактическое, Ожидаемое);
    ИначеЕсли ТипЗнч(Ожидаемое) = Тип("ДвоичныеДанные") Тогда
        ПроверитьДвоичныеДанныеJanx(Фактическое, Ожидаемое);
    ИначеЕсли ТипЗнч(Ожидаемое) = Тип("Массив") Тогда
        ПроверитьМассивJanx(Фактическое, Ожидаемое);
    ИначеЕсли OPI_Инструменты.ЭтоКоллекция(Ожидаемое, Истина) Тогда
        ПроверитьКартуJanx(Фактическое, Ожидаемое);
    Иначе
        ОжидаетЧто(Фактическое).Равно(Ожидаемое);
    КонецЕсли;

КонецПроцедуры

Процедура ПроверитьЧислоJanx(Знач Фактическое, Знач Ожидаемое)

    ОжидаетЧто(ТипЗнч(Фактическое)).Равно(Тип("Число"));

    Если Фактическое = Ожидаемое Тогда
        Возврат;
    КонецЕсли;

    Разница = Фактическое - Ожидаемое;

    Если Разница < 0 Тогда
        Разница = -Разница;
    КонецЕсли;

    ОжидаетЧто(Разница <= 0.000000000001).Равно(Истина);

КонецПроцедуры

Функция Проверка_Janx_Бенчмарк(Знач Результат, Знач Вариант, Исходное = Неопределено)

    ПроверитьКартуJanx(Результат["JsonВосстановленное"], ИсходноеJsonИзБенчмаркаJanx(Исходное));
    ПроверитьКартуJanx(Результат["JanxВосстановленное"], Исходное);

    ВывестиСлужебнуюИнформацию(
        СтрШаблон("%1 мс", Результат["JsonСериализацияМс"])
        , "JSON сериализация (без bin)"
        , "Janx");

    ВывестиСлужебнуюИнформацию(
        СтрШаблон("%1 мс", Результат["JsonДесериализацияМс"])
        , "JSON десериализация (без bin)"
        , "Janx");

    ВывестиСлужебнуюИнформацию(
        СтрШаблон("%1 мс", Результат["JanxСериализацияБезBinМс"])
        , "Janx сериализация (без bin)"
        , "Janx");

    ВывестиСлужебнуюИнформацию(
        СтрШаблон("%1 мс", Результат["JanxДесериализацияБезBinМс"])
        , "Janx десериализация (без bin)"
        , "Janx");

    ВывестиСлужебнуюИнформацию(
        СтрШаблон("%1 мс", Результат["JanxСериализацияМс"])
        , "Janx сериализация (с bin)"
        , "Janx");

    ВывестиСлужебнуюИнформацию(
        СтрШаблон("%1 мс", Результат["JanxДесериализацияМс"])
        , "Janx десериализация (с bin)"
        , "Janx");

    Возврат СтрШаблон(
        "JSON ser %1 ms, des %2 ms | Janx ser %3 ms, des %4 ms | JSON %5 chars, Janx %6 B (app %7 B)"
        , Результат["JsonСериализацияМс"]
        , Результат["JsonДесериализацияМс"]
        , Результат["JanxСериализацияМс"]
        , Результат["JanxДесериализацияМс"]
        , СтрДлина(Результат["JsonСтрока"])
        , Результат["JanxДанные"].Размер()
        , Результат["РазмерAppendix"]);

КонецФункции

Функция ИсходноеJsonИзБенчмаркаJanx(Знач Исходное)

    ЭлементыJson = Новый Массив;

    Для Каждого Элемент Из Исходное.items Цикл

        ЭлементJson = Новый Структура;
        ЭлементJson.Вставить("index", Элемент.index);
        ЭлементJson.Вставить("flag" , Элемент.flag);
        ЭлементJson.Вставить("title", Элемент.title);
        ЭлементJson.Вставить("ratio", Элемент.ratio);

        Если Элемент.Свойство("note") Тогда
            ЭлементJson.Вставить("note", Элемент.note);
        КонецЕсли;

        ЭлементJson.Вставить("values", Элемент.values);
        ЭлементJson.Вставить("attrs" , Элемент.attrs);
        ЭлементыJson.Добавить(ЭлементJson);

    КонецЦикла;

    ИсходноеJson = Новый Структура;
    ИсходноеJson.Вставить("version", Исходное.version);
    ИсходноеJson.Вставить("label"  , Исходное.label);
    ИсходноеJson.Вставить("root"   , Исходное.root);
    ИсходноеJson.Вставить("items"  , ЭлементыJson);

    Возврат ИсходноеJson;

КонецФункции

Функция Проверка_ReportPortal_ПолучитьВременныйТокен(Знач Результат, Знач Вариант, Параметры = "")

    Токен = Результат["access_token"];

    ОжидаетЧто(Токен).Заполнено();

    ЗаписатьПараметр("RPortal_TempToken", Токен);
    Параметры.Вставить("RPortal_TempToken", Токен);

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_ПолучитьПостоянныйТокен(Знач Результат, Знач Вариант, Параметры = "")

    Токен = Результат["api_key"];
    UID   = Результат["id"];

    ОжидаетЧто(Токен).Заполнено();

    ЗаписатьПараметр("RPortal_TestApiKey", Токен);
    Параметры.Вставить("RPortal_TestApiKey", Токен);

    ЗаписатьПараметр("RPortal_TestKeyID", UID);
    Параметры.Вставить("RPortal_TestKeyID", UID);

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_УдалитьПостоянныйТокен(Знач Результат, Знач Вариант)

    Ответ = Результат["message"];
    ОжидаетЧто(СтрЗаканчиваетсяНа(Ответ, "was successfully deleted.")).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_ПолучитьТокеныПользователя(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["items"]).ИмеетТип("Массив");

    Если Результат["items"].Количество() > 0 Тогда
        ПервыйТокен = Результат["items"][0];
        ОжидаетЧто(ПервыйТокен["id"]).Заполнено();
        ОжидаетЧто(ПервыйТокен["name"]).Заполнено();
    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_СоздатьЗапуск(Знач Результат, Знач Вариант, Параметры = "")

    IDЗапуска = Результат["id"];

    ОжидаетЧто(IDЗапуска).Заполнено();

    ЗаписатьПараметр("RPortal_TestLaunch", IDЗапуска);
    Параметры.Вставить("RPortal_TestLaunch", IDЗапуска);

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_ЗавершитьЗапуск(Знач Результат, Знач Вариант)

    IDЗапуска = Результат["id"];
    ОжидаетЧто(IDЗапуска).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_СоздатьЭлемент(Знач Результат, Знач Вариант, Параметры = "")

    IDЗапуска = Результат["id"];

    ОжидаетЧто(IDЗапуска).Заполнено();

    ЗаписатьПараметр("RPortal_TestItem", IDЗапуска);
    Параметры.Вставить("RPortal_TestItem", IDЗапуска);

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_ЗавершитьЭлемент(Знач Результат, Знач Вариант)

    ОжидаетЧто(СтрНайти(Результат["message"], "successfully finished") > 0).Равно(Истина);
    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_ПолучитьСтруктуруЗапуска(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Если Вариант = "Пустая" Тогда

        Для Каждого Элемент Из Результат Цикл

            Если OPI_Инструменты.ЭтоПримитивныйТип(Элемент.Значение) Тогда
                ОжидаетЧто(ЗначениеЗаполнено(Элемент.Значение)).Равно(Ложь);
            КонецЕсли;

        КонецЦикла;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_ПолучитьСтруктуруЭлемента(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Если Вариант = "Пустая" Тогда

        Для Каждого Элемент Из Результат Цикл

            Если OPI_Инструменты.ЭтоПримитивныйТип(Элемент.Значение) Тогда
                ОжидаетЧто(ЗначениеЗаполнено(Элемент.Значение)).Равно(Ложь);
            КонецЕсли;

        КонецЦикла;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_ПолучитьСтруктуруЗавершенияЭлемента(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Если Вариант = "Пустая" Тогда

        Для Каждого Элемент Из Результат Цикл

            Если OPI_Инструменты.ЭтоПримитивныйТип(Элемент.Значение) Тогда
                ОжидаетЧто(ЗначениеЗаполнено(Элемент.Значение)).Равно(Ложь);
            КонецЕсли;

        КонецЦикла;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_ПолучитьСтруктуруЗавершенияЗапуска(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);
    ОжидаетЧто(Результат["status"]).Равно("passed");
    ОжидаетЧто(Результат["description"]).Равно("Some test");
    ОжидаетЧто(Результат["attributes"]).Равно("key1:value1, key2:value2");

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_ЗаписатьЛог(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["id"]).Заполнено();

    IDЛога = Результат["id"];
    ЗаписатьПараметр("RPortal_TestLog", IDЛога);
    Параметры.Вставить("RPortal_TestLog", IDЛога);

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_ПолучитьСтруктуруЛога(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);
    ОжидаетЧто(Результат["message"]).Равно("Some log");

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_ПолучитьЛог(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["message"]).Равно("Some log 1");

    IDЛога = Результат["id"];
    ЗаписатьПараметр("RPortal_TestLogId", IDЛога);
    Параметры.Вставить("RPortal_TestLogId", IDЛога);

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_УдалитьЛог(Знач Результат, Знач Вариант)

    ОжидаетЧто(СтрНайти(Результат["message"], "successfully deleted") > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_СоздатьПроект(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["id"]).Заполнено();

    IDПроекта = Результат["id"];
    ЗаписатьПараметр("RPortal_TestProject", IDПроекта);
    Параметры.Вставить("RPortal_TestProject", IDПроекта);

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_УдалитьПроект(Знач Результат, Знач Вариант)

    ОжидаетЧто(СтрНайти(Результат["message"], "successfully deleted") > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_ПолучитьПроект(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["projectId"]).Заполнено();
    ОжидаетЧто(Результат["projectName"]).Равно("testproject");

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_ПолучитьПроекты(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["content"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["page"]).ИмеетТип("Соответствие");

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_ДобавитьПользователейВПроект(Знач Результат, Знач Вариант)

    ОжидаетЧто(СтрНайти(Результат["message"], "successfully") > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_ИсключитьПользователейИзПроекта(Знач Результат, Знач Вариант)

    ОжидаетЧто(СтрНайти(Результат["message"], "successfully") > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_ПолучитьЗапуск(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["id"]).Заполнено();

    IDЛога = Результат["id"];
    ЗаписатьПараметр("RPortal_TestLaunchId", IDЛога);
    Параметры.Вставить("RPortal_TestLaunchId", IDЛога);

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_ПолучитьЭлементыЗапуска(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["content"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["page"]).ИмеетТип("Соответствие");

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_ПолучитьЭлемент(Знач Результат, Знач Вариант, Параметры = "")

    ОжидаетЧто(Результат["id"]).Заполнено();

    IDЛога = Результат["id"];
    ЗаписатьПараметр("RPortal_TestItemId", IDЛога);
    Параметры.Вставить("RPortal_TestItemId", IDЛога);

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_ПолучитьЛогиЭлемента(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["content"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["page"]).ИмеетТип("Соответствие");

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_ИзменитьЗапуск(Знач Результат, Знач Вариант)

    ОжидаетЧто(СтрНайти(Результат["message"], "successfully") > 0).Равно(Истина);
    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_ИзменитьЭлемент(Знач Результат, Знач Вариант)

    ОжидаетЧто(СтрНайти(Результат["message"], "successfully") > 0).Равно(Истина);
    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_УдалитьЗапуск(Знач Результат, Знач Вариант)

    ОжидаетЧто(СтрНайти(Результат["message"], "successfully") > 0).Равно(Истина);
    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_УдалитьЭлемент(Знач Результат, Знач Вариант)

    ОжидаетЧто(СтрНайти(Результат["message"], "successfully") > 0).Равно(Истина);
    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_ПолучитьОтчетЗапуска(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Строка");
    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_СоздатьПользователя(Знач Результат, Знач Вариант, Параметры = "")

    IDПользователя = Результат["id"];

    ОжидаетЧто(IDПользователя).Заполнено();

    ЗаписатьПараметр("RPortal_TestUser", IDПользователя);
    Параметры.Вставить("RPortal_TestUser", IDПользователя);

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_УдалитьПользователя(Знач Результат, Знач Вариант)

    ОжидаетЧто(СтрНайти(Результат["message"], "successfully") > 0).Равно(Истина);
    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_ПолучитьСтруктуруПользователя(Знач Результат, Знач Вариант)

    ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);

    Если Вариант = "Пустая" Тогда

        Для Каждого Элемент Из Результат Цикл

            Если OPI_Инструменты.ЭтоПримитивныйТип(Элемент.Значение) Тогда
                ОжидаетЧто(ЗначениеЗаполнено(Элемент.Значение)).Равно(Ложь);
            КонецЕсли;

        КонецЦикла;

    КонецЕсли;

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_ИзменитьПользователя(Знач Результат, Знач Вариант)

    ОжидаетЧто(СтрНайти(Результат["message"], "successfully") > 0).Равно(Истина);

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_ПолучитьТекущегоПользователя(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["userId"]).Заполнено();
    ОжидаетЧто(Результат["email"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_ПолучитьПользователя(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["userId"]).Заполнено();
    ОжидаетЧто(Результат["email"]).Заполнено();
    ОжидаетЧто(Результат["fullName"]).Заполнено();

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_ПолучитьПользователей(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат["content"]).ИмеетТип("Массив");
    ОжидаетЧто(Результат["page"]).ИмеетТип("Соответствие");

    Возврат Результат;

КонецФункции

Функция Проверка_ReportPortal_ПолучитьПроектыПользователя(Знач Результат, Знач Вариант)

    ОжидаетЧто(Результат).ИмеетТип("Соответствие");

    Если Результат.Количество() > 0 Тогда
        Для Каждого Проект Из Результат Цикл
            ОжидаетЧто(Проект.Значение["projectRole"]).Заполнено();
            Прервать;
        КонецЦикла;
    КонецЕсли;

    Возврат Результат;

КонецФункции

#КонецОбласти

#Область ReportPortal

Процедура ЗаписатьПропущенныеТесты()

    ВсеТесты         = ПолучитьПолныйСписокТестов();
    ВыполненныеТесты = Новый СписокЗначений;
    ВыполненныеТесты.ЗагрузитьЗначения(ПолучитьСписокВыполненныхТестов());

    Если ВыполненныеТесты.Количество() / ВсеТесты.Количество() > 0.8 Тогда

        Для Каждого Тест Из ВсеТесты Цикл

            Если ЗначениеЗаполнено(Тест["variant"]) Тогда
                ИмяФункцииТеста = СтрШаблон("%1_%2_%3", Тест["lib"], Тест["name"], Тест["variant"]);
            Иначе
                ИмяФункцииТеста = СтрШаблон("%1_%2"   , Тест["lib"], Тест["name"]);
            КонецЕсли;

            Если ВыполненныеТесты.НайтиПоЗначению(ИмяФункцииТеста) = Неопределено Тогда
                ЗаписатьПропущенныйТест(Тест["lib"], Тест["name"], Тест["variant"]);
            КонецЕсли;

        КонецЦикла;

    КонецЕсли;

КонецПроцедуры

Процедура ЗаписатьПропущенныйТест(Знач Библиотека, Знач Метод, Знач Вариант)

    Данные = ПолучитьСуществующийЗапуск();

    Если Данные = Неопределено Тогда
        Возврат;
    КонецЕсли;

    IDНабора   = СоздатьНаборЗапуска(Библиотека);
    IDЭлемента = СоздатьТестовыйЭлемент(IDНабора, Библиотека, Метод, Вариант);

    Токен  = ПолучитьПараметр("RPortal_Token");
    Проект = ПолучитьПараметр("RPortal_MainProject");
    URL    = ПолучитьПараметр("RPortal_URL");

    ТекущаяДата = ПолучитьВремяЗапуска();

    СтруктураЭлемента = Новый Структура;

    СтруктураЭлемента.Вставить("endTime"   , ТекущаяДата);
    СтруктураЭлемента.Вставить("launchUuid", Данные["id"]);
    СтруктураЭлемента.Вставить("status"    , "skipped");

    ReportPortal().ЗавершитьЭлемент(URL, Токен, Проект, IDЭлемента, СтруктураЭлемента);

КонецПроцедуры

Процедура ЗаписатьЛогТеста(Знач Тест, Знач Текст, Знач Уровень)

    Данные = ПолучитьСуществующийЗапуск();

    Если Данные = Неопределено Тогда
        Возврат;
    КонецЕсли;

    ТекущаяДата = ПолучитьВремяЗапуска();

    Токен  = ПолучитьПараметр("RPortal_Token");
    Проект = ПолучитьПараметр("RPortal_MainProject");
    URL    = ПолучитьПараметр("RPortal_URL");

    СтруктураЛога = Новый Структура;
    СтруктураЛога.Вставить("launchUuid", Данные["id"]);
    СтруктураЛога.Вставить("itemUuid"  , Тест);
    СтруктураЛога.Вставить("time"      , ТекущаяДата);
    СтруктураЛога.Вставить("message"   , Текст);
    СтруктураЛога.Вставить("level"     , Уровень);

    ReportPortal().ЗаписатьЛог(URL, Токен, Проект, СтруктураЛога);

КонецПроцедуры

Процедура ЗавершитьТестовыйЭлемент(Знач UUID, Знач Статус, Знач Атрибуты = Неопределено)

    Данные = ПолучитьСуществующийЗапуск();

    Если Данные = Неопределено Тогда
        Возврат;
    КонецЕсли;

    Токен  = ПолучитьПараметр("RPortal_Token");
    Проект = ПолучитьПараметр("RPortal_MainProject");
    URL    = ПолучитьПараметр("RPortal_URL");

    ТекущаяДата = ПолучитьВремяЗапуска();

    СтруктураЭлемента = Новый Структура;

    СтруктураЭлемента.Вставить("endTime"   , ТекущаяДата);
    СтруктураЭлемента.Вставить("launchUuid", Данные["id"]);
    СтруктураЭлемента.Вставить("status"    , Статус);

    Если Атрибуты <> Неопределено Тогда
        СтруктураЭлемента.Вставить("attributes", Атрибуты);
    КонецЕсли;

    ReportPortal().ЗавершитьЭлемент(URL, Токен, Проект, UUID, СтруктураЭлемента);

    НайденныйТест = Данные["items"].Получить(UUID);

    Если ЗначениеЗаполнено(НайденныйТест) Тогда
        Данные["tests"].Добавить(НайденныйТест);
    КонецЕсли;

    ЗаписатьФайлЗапуска(Данные);

КонецПроцедуры

Процедура ЗаписатьФайлЗапуска(Знач Данные)

    ФайлЗапуска = ПолучитьПараметр("RPortal_MainLaunch");
    OPI_Инструменты.ЗаписатьJSONФайл(ФайлЗапуска, Данные);

КонецПроцедуры

Процедура СоздатьФайлЗапуска(Знач UUID)

    ИВФ = ПолучитьИмяВременногоФайла();

    СтруктураДанных = Новый Структура;
    СтруктураДанных.Вставить("id"    , UUID);
    СтруктураДанных.Вставить("ended" , Ложь);
    СтруктураДанных.Вставить("suites", Новый Соответствие);
    СтруктураДанных.Вставить("tests" , Новый Массив);
    СтруктураДанных.Вставить("items" , Новый Соответствие);

    OPI_Инструменты.ЗаписатьJSONФайл(ИВФ, СтруктураДанных);
    ЗаписатьПараметр("RPortal_MainLaunch", ИВФ);

КонецПроцедуры

Функция ПолучитьСуществующийЗапуск()

    Данные   = ПрочитатьФайлЗапуска();
    UID      = Данные["id"];
    Завершен = Данные["ended"];

    Если Не ЗначениеЗаполнено(UID) Или Завершен Тогда
        Возврат Неопределено;
    Иначе
        Возврат Данные;
    КонецЕсли;

КонецФункции

Функция ПолучитьВремяЗапуска()

    Сдвиг       = ?(OPI_Инструменты.ЭтоWindows(), 3600 * 3, 0);
    ТекущаяДата = OPI_Инструменты.ПолучитьТекущуюДату() - Сдвиг;

    Возврат ТекущаяДата;

КонецФункции

Функция ПрочитатьФайлЗапуска()

    ФайлЗапуска = ПолучитьПараметр("RPortal_MainLaunch");

    ОбъектЗапуска = Новый Файл(ФайлЗапуска);

    Если Не ЗначениеЗаполнено(ФайлЗапуска) Или Не ОбъектЗапуска.Существует() Тогда
        Возврат Новый Соответствие;
    КонецЕсли;

    Данные = OPI_Инструменты.ПрочитатьJSONФайл(ФайлЗапуска, Истина);
    Возврат Данные;

КонецФункции

Функция ReportPortal()

    Попытка

        // BSLLS:CommonModuleAssign-off

        //@skip-check property-not-writable
        //@skip-check bsl-legacy-check-static-feature-access
        OPI_ReportPortal = Неопределено;

        // BSLLS:CommonModuleAssign-on

        ТекущийКаталог = СтрЗаменить(ТекущийСценарий().Каталог, "\", "/");
        МассивПути     = СтрРазделить(ТекущийКаталог, "/");
        МассивПути.Удалить(МассивПути.ВГраница());
        МассивПути.Удалить(МассивПути.ВГраница());
        МассивПути.Добавить("api");
        МассивПути.Добавить("Modules");
        МассивПути.Добавить("OPI_ReportPortal.os");
        ПодключитьСценарий(СтрСоединить(МассивПути, "/"), "ReportPortal");
        OPI_ReportPortal = Новый("ReportPortal");

        Возврат OPI_ReportPortal;

    Исключение

        Возврат OPI_ReportPortal;

    КонецПопытки;

КонецФункции

#КонецОбласти

#Область Прочее

Процедура ОбработатьРезультатТестирования(Знач Результат
    , Знач Метод
    , Знач Библиотека
    , Знач Вариант = ""
    , ДопПараметр1 = Неопределено
    , ДопПараметр2 = Неопределено
    , ДопПараметр3 = Неопределено)

    // BSLLS:UnusedLocalVariable-off
    //
    //@skip-check module-unused-local-variable
    Результат_ = ?(OPI_Инструменты.ЭтоКоллекция(Результат), OPI_Инструменты.КопироватьКоллекцию(Результат), Результат);

    // BSLLS:UnusedLocalVariable-on

    ЭтоВариант = ЗначениеЗаполнено(Вариант);
    МетодЛога  = ?(ЭтоВариант, СтрШаблон("%1 (%2)", Метод, Вариант), Метод);

    IDНабора   = СоздатьНаборЗапуска(Библиотека);
    IDЭлемента = СоздатьТестовыйЭлемент(IDНабора, Библиотека, Метод, Вариант);

    Попытка

        МассивПараметров = Новый Массив;
        МассивПараметров.Добавить("Результат_");
        МассивПараметров.Добавить("Вариант");

        Если ДопПараметр1 <> Неопределено Тогда
            МассивПараметров.Добавить("ДопПараметр1");
        КонецЕсли;

        Если ДопПараметр2 <> Неопределено Тогда
            МассивПараметров.Добавить("ДопПараметр2");
        КонецЕсли;

        Если ДопПараметр3 <> Неопределено Тогда
            МассивПараметров.Добавить("ДопПараметр3");
        КонецЕсли;

        ШаблонПроверки = "РезультатПроверки = Проверка_%1_%2(%3)";

        ВызовПроверки     = СтрШаблон(ШаблонПроверки, Библиотека, Метод, СтрСоединить(МассивПараметров, ", "));
        РезультатПроверки = Неопределено;

        //@skip-check server-execution-safe-mode
        Выполнить(ВызовПроверки);

        Текст = ВывестиЛог(Результат, МетодЛога, Библиотека);

        Если Не ЗначениеЗаполнено(Вариант) Тогда

            РезультатСтрока = ТипЗнч(РезультатПроверки) = Тип("Строка");
            Перезаписывать  = Не ?(РезультатСтрока, РезультатПроверки = "", РезультатПроверки = Неопределено);

            Если Перезаписывать Тогда
                ЗаписатьФайлЛога(РезультатПроверки, Метод, Библиотека);
            Иначе
                ЗаписатьФайлЛога(Результат        , Метод, Библиотека, Ложь);
            КонецЕсли;

        КонецЕсли;

        ЗаписатьЛогТеста(IDЭлемента, Текст, "info");
        ЗавершитьТестовыйЭлемент(IDЭлемента, "passed");

    Исключение

        ООп   = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
        Текст = ВывестиЛог(Результат, МетодЛога, Библиотека, ООп);

        ЗаписатьЛогТеста(IDЭлемента, Текст, "error");
        ЗавершитьТестовыйЭлемент(IDЭлемента, "failed");

        ВызватьИсключение ООп;

    КонецПопытки;

КонецПроцедуры

Функция ПолучитьЗначениеИзФайла(Параметр, Путь)

    Значения = OPI_Инструменты.ПрочитатьJSONФайл(Путь);
    Возврат ?(Значения.Свойство(Параметр), Значения[Параметр], "");

КонецФункции

Функция ПутьКФайлуДанных()

    Путь          = "";
    ВозможныеПути = Новый Массив;
    ВозможныеПути.Добавить("./data.json");
    ВозможныеПути.Добавить("C:\GDrive\Мой диск\data.json");
    ВозможныеПути.Добавить("G:\My Drive\data.json");

    Для Каждого ВозможныйПуть Из ВозможныеПути Цикл

        ФайлРепозитория = Новый Файл(ВозможныйПуть);

        Если ФайлРепозитория.Существует() Тогда
            Путь = ВозможныйПуть;
            Прервать;
        КонецЕсли;

    КонецЦикла;

    Возврат Путь;

КонецФункции

Функция ПолучитьОбщийМодуль(Знач Имя)

    //@skip-check server-execution-safe-mode
    Модуль = Вычислить(Имя);
    Возврат Модуль;

КонецФункции

Функция ПолучитьЗначениеДляCLI(Знач Значение, Знач Вложенный = Ложь, ДопОпции = "")

    ТекущийТип        = ТипЗнч(Значение);
    ТекущийТипСтрокой = Строка(ТекущийТип);
    Обертка           = Ложь;

    Если ТекущийТип = Тип("Число") Тогда

        Если Не Вложенный Тогда
            Значение = OPI_Инструменты.ЧислоВСтроку(Значение);
        КонецЕсли;

    ИначеЕсли ТекущийТип = Тип("Строка") Или ТекущийТип = Тип("УникальныйИдентификатор") Тогда

        Значение = OPI_Инструменты.ЧислоВСтроку(Значение);

        Если Не Вложенный Тогда

            Значение = СтрЗаменить(Значение, Символы.ПС, "\n");
            Обертка  = Истина;

        КонецЕсли;

        Если OPI_Инструменты.ЭтоWindows() Тогда
            Значение = СтрЗаменить(Значение, "%", "%%");
        КонецЕсли;

    ИначеЕсли ТекущийТип = Тип("Дата") Тогда

        Если Не Вложенный Тогда
            Значение = OPI_ИнструментыВызовСервера.ПолучитьXMLСтроку(Значение);
            Обертка  = Истина;
        КонецЕсли;

    ИначеЕсли ТекущийТип = Тип("Структура") Или ТекущийТип = Тип("Соответствие") Или ТекущийТип = Тип("Массив") Тогда

        Если ТекущийТип = Тип("Структура") Или ТекущийТип = Тип("Соответствие") Тогда

            Значение_ = Новый (ТекущийТипСтрокой);

            Для Каждого КлючЗначение Из Значение Цикл
                Значение_.Вставить(КлючЗначение.Ключ, ПолучитьЗначениеДляCLI(КлючЗначение.Значение, Истина, ДопОпции));
            КонецЦикла;

            Значение = Значение_;

        КонецЕсли;

        Если ТекущийТип = Тип("Соответствие") Тогда

            Значение_ = Новый Соответствие;

            Для Каждого КлючЗначение Из Значение Цикл
                Значение_.Вставить(ПолучитьЗначениеДляCLI(КлючЗначение.Ключ, Истина, ДопОпции), КлючЗначение.Значение);
            КонецЦикла;

            Значение = Значение_;

        КонецЕсли;

        ЗаписьJSON = Новый ЗаписьJSON;

        Если ТекущийТип = Тип("Массив") Или Вложенный Тогда

            Если ТекущийТип = Тип("Массив") Тогда
                Для Н = 0 По Значение.ВГраница() Цикл
                    Значение[Н] = ПолучитьЗначениеДляCLI(Значение[Н], Истина, ДопОпции);
                КонецЦикла;
            КонецЕсли;

            Если Не Вложенный Тогда
                ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, , Ложь);
                ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписи);
                ЗаписатьJSON(ЗаписьJSON, Значение);

                Значение = ЗаписьJSON.Закрыть();
                Обертка  = Истина;
            КонецЕсли;

        Иначе

            // BSLLS:MissingTemporaryFileDeletion-off

            //@skip-check missing-temporary-file-deletion
            ИВФ   = ПолучитьИмяВременногоФайла("json");

            // BSLLS:MissingTemporaryFileDeletion-on

            OPI_Инструменты.ЗаписатьJSONФайл(ИВФ, Значение);

            Значение = ИВФ;
            Обертка  = Истина;

        КонецЕсли;

    ИначеЕсли ТекущийТип = Тип("Булево") Тогда

        Если Не Вложенный Тогда
            Значение = ?(Значение, "true", "false");
            Обертка  = Ложь;
        КонецЕсли;

    ИначеЕсли ТекущийТип = Тип("ДвоичныеДанные") Тогда

        // BSLLS:MissingTemporaryFileDeletion-off

        //@skip-check missing-temporary-file-deletion
        ИВФ = ПолучитьИмяВременногоФайла();
        Значение.Записать(ИВФ);
        Значение = ИВФ;
        Обертка  = Не Вложенный;

        // BSLLS:MissingTemporaryFileDeletion-on

    ИначеЕсли СтрНачинаетсяС(ТекущийТипСтрокой, "AddIn") Тогда

        Значение = ОбработатьПараметрКомпонентыCLI(Значение, ТекущийТипСтрокой, ДопОпции);
        Обертка  = Не Вложенный;

    ИначеЕсли ТекущийТип = Тип("Неопределено") И Вложенный Тогда

        Значение = Неопределено;

    Иначе

        ВызватьИсключение "Неподдерживаемый тип " + ТекущийТипСтрокой;

    КонецЕсли;

    Если Не OPI_Инструменты.ЭтоWindows() И Не Вложенный Тогда
        Значение = СтрЗаменить(Значение, """", """'""");
    КонецЕсли;

    Если Обертка Тогда
        Значение = """" + Значение + """";
    КонецЕсли;

    Возврат Значение;

КонецФункции

Функция ОбработатьПараметрКомпонентыCLI(Знач Значение, Знач ТипЗначения, ДопОпции)

    ИмяКомпоненты = вРег(СтрРазделить(ТипЗначения, ".")[1]);

    Если ИмяКомпоненты = "OPI_POSTGRESQL" Или ИмяКомпоненты = "OPI_MYSQL" Или ИмяКомпоненты = "OPI_MSSQL" Тогда

        Если ИмяКомпоненты = "OPI_MSSQL" Тогда

            TLS = Новый Структура("use_tls, accept_invalid_certs, ca_cert_path", Истина, Истина, "");
            ДопОпции.Вставить("tls", TLS);

        Иначе

            TLS = Значение.GetTLSSettings();

            Если ЗначениеЗаполнено(TLS) Тогда
                OPI_ПреобразованиеТипов.ПолучитьКоллекцию(TLS);
                ДопОпции.Вставить("tls", TLS);
            КонецЕсли;

        КонецЕсли;

        Значение = Значение["ConnectionString"];

    ИначеЕсли ИмяКомпоненты = "OPI_MONGODB" Тогда

        Значение = Значение["ConnectionString"];

    ИначеЕсли ИмяКомпоненты = "OPI_SQLITE" Тогда

        Значение = Значение["Database"];

    ИначеЕсли ИмяКомпоненты = "OPI_TCPCLIENT" Тогда

        Значение = Значение["Address"];

    ИначеЕсли ИмяКомпоненты = "OPI_RCON" Или ИмяКомпоненты = "OPI_GRPC" Тогда

        Значение = Значение.GetSettings();

        Сообщить(Значение);

        OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Значение);
        ИВФ = ПолучитьИмяВременногоФайла();
        OPI_Инструменты.ЗаписатьJSONФайл(ИВФ, Значение);

        Значение = ИВФ;

    ИначеЕсли ИмяКомпоненты = "OPI_FTP" Тогда

        Значение = Значение.GetConfiguration();
        OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Значение);

        Данные       = Значение["data"];
        Конфигурация = Новый Структура;

        Конфигурация.Вставить("set", Данные["ftp_settings"]);

        Если ЗначениеЗаполнено(Данные["tls_settings"]) Тогда
            Конфигурация.Вставить("tls", Данные["tls_settings"]);
        КонецЕсли;

        Если ЗначениеЗаполнено(Данные["proxy_settings"]) Тогда
            Конфигурация.Вставить("proxy", Данные["proxy_settings"]);
        КонецЕсли;

        ИВФ = ПолучитьИмяВременногоФайла();
        OPI_Инструменты.ЗаписатьJSONФайл(ИВФ, Конфигурация);

        Значение = ИВФ;

    ИначеЕсли ИмяКомпоненты = "OPI_SSH" Тогда

        Значение = Значение.GetConfiguration();
        OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Значение);

        Значение = Значение["conf"];

        ИВФ = ПолучитьИмяВременногоФайла();
        OPI_Инструменты.ЗаписатьJSONФайл(ИВФ, Значение);

        Значение = ИВФ;

    Иначе
        ВызватьИсключение "Неподдерживаемый тип " + ТипЗначения;
    КонецЕсли;

    Возврат Значение;

КонецФункции

Функция ОформитьОпцию(Знач Имя, Знач Значение, Вложенный = Ложь)

    МассивСекретов = ПолучитьМассивКлючейСекретов();

    СписокИсключений = Новый СписокЗначений;
    СписокИсключений.Добавить("passive");
    СписокИсключений.Добавить("keyboard");

    СтруктураЗамен = Новый Соответствие;
    СтруктураЗамен.Вставить("host.docker.internal", "127.0.0.1");

    Обертка = Ложь;

    Если ТипЗнч(Значение) = Тип("Строка") Тогда

        Для Каждого СекретныйКлюч Из МассивСекретов Цикл

            Если СтрНайти(нРег(Имя), СекретныйКлюч) <> 0 И СписокИсключений.НайтиПоЗначению(нРег(Имя)) = Неопределено Тогда

                Значение = "***";
                Обертка  = Истина;

            КонецЕсли;

        КонецЦикла;

        Для Каждого ЗначениеЗамены Из СтруктураЗамен Цикл
            Значение = СтрЗаменить(Значение, ЗначениеЗамены.Ключ, ЗначениеЗамены.Значение);
        КонецЦикла;

        ЗначениеСтрокой = Значение;

        Если Не Вложенный И СтрНачинаетсяС(ЗначениеСтрокой, """") И СтрЗаканчиваетсяНа(ЗначениеСтрокой, """") Тогда

            ЗначениеСтрокой = Лев(ЗначениеСтрокой, СтрДлина(ЗначениеСтрокой) - 1);
            ЗначениеСтрокой = Прав(ЗначениеСтрокой, СтрДлина(ЗначениеСтрокой) - 1);

            Обертка = Истина;

        КонецЕсли;

        Значение = ЗначениеСтрокой;
        OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Значение, Ложь);

    Иначе
        ЗначениеСтрокой = "-----------!!!!№№№---------------";
    КонецЕсли;

    Если ТипЗнч(Значение) = Тип("Массив") Тогда

        Если Не Значение.Количество() = 0 Тогда

            Если Строка(Значение[0]) = ЗначениеСтрокой Тогда
                Значение = ЗначениеСтрокой;
            Иначе

                Для Н = 0 По Значение.ВГраница() Цикл
                    Значение[Н] = ОформитьОпцию("", Значение[Н], Истина);
                КонецЦикла;

            КонецЕсли;

        КонецЕсли;

    ИначеЕсли OPI_Инструменты.ЭтоКоллекция(Значение, Истина) Тогда

        Значение_ = Новый (ТипЗнч(Значение));

        Для Каждого КлючЗначение Из Значение Цикл
            Значение_.Вставить(КлючЗначение.Ключ, ОформитьОпцию(КлючЗначение.Ключ, КлючЗначение.Значение, Истина));
        КонецЦикла;

        Значение = Значение_;

    Иначе

        OPI_ПреобразованиеТипов.ПолучитьСтроку(Значение);

    КонецЕсли;

    Если Вложенный Тогда
        Возврат Значение;
    Иначе

        Если Не ТипЗнч(Значение) = Тип("Строка") Тогда
            Попытка
                Значение = OPI_Инструменты.JSONСтрокой(Значение, , Ложь, Ложь);
            Исключение
                Значение = Строка(Значение);
            КонецПопытки;
        КонецЕсли;

        Значение = ?(Обертка, СтрШаблон("""%1""", Значение), Значение);
        Возврат "--" + Имя + " " + Значение;

    КонецЕсли;

КонецФункции

Функция ПрочестьРезультатCLI(Знач ФайлРезультата)

    Попытка

        // BSLLS:ExternalAppStarting-off
        ЧтениеJSON = Новый ЧтениеJSON;
        ЧтениеJSON.ОткрытьФайл(ФайлРезультата);
        Результат  = ПрочитатьJSON(ЧтениеJSON, Истина);
        ЧтениеJSON.Закрыть();
        // BSLLS:ExternalAppStarting-on

    Исключение

        Сообщить(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));

        Попытка
            Результат =  Новый ДвоичныеДанные(ФайлРезультата);

            Если Результат.Размер() < 10000 Тогда
                Результат = ПолучитьСтрокуИзДвоичныхДанных(Результат);
            КонецЕсли;

        Исключение
            Результат = Null;
        КонецПопытки;

    КонецПопытки;

    Возврат Результат;

КонецФункции

Функция ВывестиЛог(Знач Результат, Знач Метод, Знач Библиотека, Знач ОписаниеОшибки = Неопределено)

    Шапка = Строка(OPI_Инструменты.ПолучитьТекущуюДату()) + " | " + Метод;

    Данные = РезультатТестаКакТекст(Результат);

    Текст = Шапка + Символы.ПС + Символы.ПС;

    Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
        Текст = Текст + ОписаниеОшибки + Символы.ПС + Символы.ПС + "---------------------------------" + Символы.ПС
            + Символы.ПС;
    КонецЕсли;

    Текст = Текст + Данные + Символы.ПС + Символы.ПС + "---------------------------------" + Символы.ПС;

    Сообщить(Текст);

    Возврат Текст;

КонецФункции

Функция РезультатТестаКакТекст(Знач Результат)

    Попытка
        Данные = OPI_Инструменты.JSONСтрокой(Результат);
    Исключение
        Данные = Строка(Результат);
    КонецПопытки;

    Данные = СокрЛП(Данные);

    Возврат Данные;

КонецФункции

Функция ЗаменитьСекретыРекурсивно(Значение, Знач Признаки, Знач Маскировать = Ложь)

    Если ТипЗнч(Значение) = Тип("Массив") Тогда

        Значение_ = Новый Массив;

        Для Каждого Элемент Из Значение Цикл
            Значение_.Добавить(ЗаменитьСекретыРекурсивно(Элемент, Признаки, Маскировать));
        КонецЦикла;

    ИначеЕсли OPI_Инструменты.ЭтоКоллекция(Значение, Истина) Тогда

        Значение_ = Новый(ТипЗнч(Значение));

        Для Каждого Элемент Из Значение Цикл

            ТекущийКлюч     = Элемент.Ключ;
            ТекущееЗначение = Элемент.Значение;

            Если OPI_Инструменты.ЭтоКоллекция(ТекущееЗначение) Тогда
                ТекущееЗначение = ЗаменитьСекретыРекурсивно(ТекущееЗначение, Признаки);
            Иначе

                Для Каждого Признак Из Признаки Цикл

                    ТекущийКлючН = нРег(ТекущийКлюч);
                    ПризнакН     = нРег(Признак);

                    Если СтрНайти(ТекущийКлючН, ПризнакН) > 0 Тогда
                        ТекущееЗначение = ЗаменитьСекретыРекурсивно(ТекущееЗначение, Признаки, Истина);
                        Прервать;
                    КонецЕсли;

                КонецЦикла;

            КонецЕсли;

            СократитьСтроку(ТекущееЗначение, 100);

            Значение_.Вставить(ТекущийКлюч, ТекущееЗначение);

        КонецЦикла;

    Иначе

        Если Маскировать Тогда
            Значение_ = "***";
        Иначе
            Значение_ = Значение;
        КонецЕсли;

        СократитьСтроку(Значение_, 100);

    КонецЕсли;

    Возврат Значение_;

КонецФункции

Функция ПолучитьМассивКлючейСекретов()

    МассивСекретов = Новый Массив;
    МассивСекретов.Добавить("token");
    МассивСекретов.Добавить("key");
    МассивСекретов.Добавить("secret");
    МассивСекретов.Добавить("pass");
    МассивСекретов.Добавить("password");
    МассивСекретов.Добавить("client");
    МассивСекретов.Добавить("api");
    МассивСекретов.Добавить("refresh");
    МассивСекретов.Добавить("phone");
    МассивСекретов.Добавить("idInstance");
    МассивСекретов.Добавить("wid");
    МассивСекретов.Добавить("sender");
    МассивСекретов.Добавить("chat");
    МассивСекретов.Добавить("invite");
    МассивСекретов.Добавить("origin");
    МассивСекретов.Добавить("bayselonarrend");

    Возврат МассивСекретов;

КонецФункции

Функция ПолучитьАтрибутыПроверкиAI(Знач Результат)

    OPI_ПреобразованиеТипов.ПолучитьСтроку(Результат);
    Результат_ = нРег(Результат);

    МассивКлючевыхСлов = Новый Массив;
    МассивКлючевыхСлов.Добавить("error");
    МассивКлючевыхСлов.Добавить("exception");
    МассивКлючевыхСлов.Добавить("failed");

    НужнаПроверка = Ложь;

    Для Каждого КлючевоеСлово Из МассивКлючевыхСлов Цикл
        Если СтрНайти(Результат_, КлючевоеСлово) > 0 Тогда
            НужнаПроверка = Истина;
            Прервать;
        КонецЕсли;
    КонецЦикла;

    Если Не НужнаПроверка Тогда
        Возврат Неопределено;
    КонецЕсли;

    Промпт = "You need to check the received service response and determine whether it is an error message from the
    |server that could not process it (regardless of the reason) or found issues with the request.
    |Return only one word ""error"" if an error is found or one word ""success"" if there was no error
    |
    |Service response:
    |%1";

    Промпт = СтрШаблон(Промпт, Результат);

    Токен  = ПолучитьПараметр("CI_AI_Token");
    URL    = ПолучитьПараметр("CI_AI_URL");
    Модель = ПолучитьПараметр("CI_AI_Model");

    Сообщение = OPI_OpenAI.ПолучитьСтруктуруСообщения("user", Промпт);

    ШаблонАтрибута = "ai_check: %1";
    Пропуск        = СтрШаблон(ШаблонАтрибута, "skipped");

    Попытка
        Ответ = OPI_OpenAI.ПолучитьОтвет(URL, Токен, Модель, Сообщение);
    Исключение
        Возврат Пропуск;
    КонецПопытки;

    Если OPI_Инструменты.ЭтоКоллекция(Ответ) Тогда

        Попытка
            ЗначениеОтвета = Ответ["choices"][0]["message"]["content"];
            Атрибут        = СтрШаблон(ШаблонАтрибута, ЗначениеОтвета);
        Исключение
            Атрибут        = Пропуск;
        КонецПопытки;

    Иначе
        Атрибут = Пропуск;
    КонецЕсли;

    Возврат Атрибут;

КонецФункции

Процедура НовыйТест(МассивТестов, МодульТестов, Знач Метод, Знач Синоним, Знач Раздел)

    Если Не ЗначениеЗаполнено(МодульТестов) Или МодульТестов = Раздел Тогда

        НовыйТест         = Новый Структура("Метод,Синоним,Раздел");
        НовыйТест.Метод   = Метод;
        НовыйТест.Синоним = Синоним;
        НовыйТест.Раздел  = Раздел;

        МассивТестов.Добавить(НовыйТест);

    КонецЕсли;

КонецПроцедуры

Процедура ЗаписатьПараметрВФайл(Знач Параметр, Знач Значение, Знач Путь)

    Значения = OPI_Инструменты.ПрочитатьJSONФайл(Путь);
    Значения.Вставить(Параметр, Значение);

    // BSLLS:ExternalAppStarting-off
    Запись              = Новый ЗаписьJSON;
    ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб);
    Запись.ОткрытьФайл(Путь, , , ПараметрыЗаписиJSON);
    ЗаписатьJSON(Запись, Значения);
    Запись.Закрыть();
    // BSLLS:ExternalAppStarting-on

КонецПроцедуры

Процедура ЗаписатьВызовCLI(Знач Библиотека, Знач Метод, Знач Опции)

    Если Не OPI_Инструменты.ЭтоOneScript() Тогда
        Возврат;
    КонецЕсли;

    КаталогПримеров = "./docs/ru/cli/" + Библиотека;
    ФайлПримеров    = Новый Файл(КаталогПримеров);

    Если Не ФайлПримеров.Существует() Тогда
        СоздатьКаталог(КаталогПримеров);
    КонецЕсли;

    КаталогМетода = КаталогПримеров + "/" + Метод;
    ФайлМетода    = Новый Файл(КаталогМетода);

    Если Не ФайлМетода.Существует() Тогда
        СоздатьКаталог(КаталогМетода);
    КонецЕсли;

    МассивОпций = Новый Массив;
    ЕстьJSON    = Ложь;

    Для Каждого Опция Из Опции Цикл

        ТекущаяОпция = Опция.Значение;

        ОбработатьОсобенныеСекретыОпций(Библиотека, Опция.Ключ, ТекущаяОпция);

        ТекущаяОпция = ОформитьОпцию(Опция.Ключ, ТекущаяОпция);

        Если Не ЕстьJSON Тогда
            ЕстьJSON = СтрНайти(ТекущаяОпция, "{") > 0 И СтрНайти(ТекущаяОпция, "}") > 0;
        КонецЕсли;

        МассивОпций.Добавить(ТекущаяОпция);

    КонецЦикла;

    Начало = "oint ";

    Если ЕстьJSON Тогда

        Информация = "JSON данные также могут быть переданы как путь к файлу .json";

        НачалоBat  = ":: " + Информация + Символы.ПС + Символы.ПС + Начало;
        НачалоBash = "# " + Информация + Символы.ПС + Символы.ПС + Начало;

    Иначе

        НачалоBat  = Начало;
        НачалоBash = Начало;

    КонецЕсли;

    РазделительBat  = " ^" + Символы.ПС + "  ";
    РазделительBash = " \" + Символы.ПС + "  ";

    СтрокаBat  = НачалоBat + Библиотека + " " + Метод + РазделительBat + СтрСоединить(МассивОпций, РазделительBat);
    СтрокаBash = НачалоBash + Библиотека + " " + Метод + РазделительBash + СтрСоединить(МассивОпций, РазделительBash);

    ПолучитьДвоичныеДанныеИзСтроки(СтрокаBat).Записать(КаталогМетода + "/bat.txt");
    ПолучитьДвоичныеДанныеИзСтроки(СтрокаBash).Записать(КаталогМетода + "/bash.txt");

КонецПроцедуры

Процедура ЗаписатьФайлЛога(Знач Данные, Знач Метод, Знач Библиотека, Знач Перезаписывать = Истина)

    Если Не OPI_Инструменты.ЭтоOneScript() Тогда
        Возврат;
    КонецЕсли;

    Попытка

        ПутьЛогов           = "./docs/ru/results";
        ПутьЛоговБиблиотеки = ПутьЛогов + "/" + Библиотека;
        ПутьКФайлу          = ПутьЛоговБиблиотеки + "/" + Метод + ".log";

        Если Не Перезаписывать Тогда

            ОбъектЛога = Новый Файл(ПутьКФайлу);

            Если ОбъектЛога.Существует() Тогда
                Возврат;
            КонецЕсли;

        КонецЕсли;

        КаталогЛогов = Новый Файл(ПутьЛогов);

        Если Не КаталогЛогов.Существует() Тогда
            СоздатьКаталог(ПутьЛогов);
        КонецЕсли;

        КаталогЛоговБиблиотеки = Новый Файл(ПутьЛоговБиблиотеки);

        Если Не КаталогЛоговБиблиотеки.Существует() Тогда
            СоздатьКаталог(ПутьЛоговБиблиотеки);
        КонецЕсли;

        Если OPI_Инструменты.ЭтоКоллекция(Данные) Тогда

            МассивСекретов = ПолучитьМассивКлючейСекретов();
            Данные         = ЗаменитьСекретыРекурсивно(Данные, МассивСекретов);

        КонецЕсли;

        ДанныеТекст = РезультатТестаКакТекст(Данные);

        ДокументЛога = Новый ТекстовыйДокумент;
        ДокументЛога.УстановитьТекст(ДанныеТекст);
        ДокументЛога.Записать(ПутьКФайлу);

    Исключение
        Сообщить("Не удалось записать файл лога!: " + ОписаниеОшибки());
    КонецПопытки;

КонецПроцедуры

Процедура СократитьСтроку(Значение, Знач ЧислоСимволов)

    Если ТипЗнч(Значение) = Тип("Строка") Тогда
        Если СтрДлина(Значение) > ЧислоСимволов Тогда
            Значение = Лев(Значение, ЧислоСимволов) + "...";
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры

Процедура ОбработатьОсобенныеСекретыОпций(Знач Библиотека, Знач Опция, Значение)

    Значение_ = Значение;

    Если Библиотека = "bitrix24" Тогда

        ОбработатьСекретыBitrix24(Опция, Значение);

    ИначеЕсли Библиотека = "postgres" Тогда

        ОбработатьСекретыPostgreSQL(Опция, Значение);

    ИначеЕсли Библиотека = "mysql" Тогда

        ОбработатьСекретыMySQL(Опция, Значение);

    ИначеЕсли Библиотека = "mssql" Тогда

        ОбработатьСекретыMSSQL(Опция, Значение);

    ИначеЕсли Библиотека = "ollama" Тогда

        ОбработатьСекретыOllama(Опция, Значение);

    ИначеЕсли Библиотека = "vk" Тогда

        ОбработатьСекретыVK(Опция, Значение);

    Иначе
        Возврат;
    КонецЕсли;

    Если Не Значение_ = Значение Тогда
        Значение = СтрШаблон("""%1""", Значение);
    КонецЕсли;

КонецПроцедуры

Процедура ОбработатьСекретыBitrix24(Знач Опция, Значение)

    Если Опция = "url" Тогда

        Значение = ?(СтрНайти(Значение, "rest") > 0, "https://b24-ar17wx.bitrix24.by/rest/1/***", Значение);

    КонецЕсли;

КонецПроцедуры

Процедура ОбработатьСекретыPostgreSQL(Знач Опция, Значение)

    Если Опция = "dbc" Тогда

        Значение = "postgresql://bayselonarrend:***@127.0.0.1:5432/";

    ИначеЕсли Опция = "addr" Тогда

        Значение = "127.0.0.1";

    Иначе
        Возврат;
    КонецЕсли;

КонецПроцедуры

Процедура ОбработатьСекретыMySQL(Знач Опция, Значение)

    Если Опция = "dbc" Тогда

        Значение = "mysql://bayselonarrend:***@127.0.0.1:3306/";

    ИначеЕсли Опция = "addr" Тогда

        Значение = "127.0.0.1";

    Иначе
        Возврат;
    КонецЕсли;

КонецПроцедуры

Процедура ОбработатьСекретыMSSQL(Знач Опция, Значение)

    Если Опция = "dbc" Тогда

        Значение = "Server=127.0.0.1;Database=***;User Id=SA;Password=***;";

    ИначеЕсли Опция = "addr" Тогда

        Значение = "127.0.0.1";

    Иначе
        Возврат;
    КонецЕсли;

КонецПроцедуры

Процедура ОбработатьСекретыOllama(Знач Опция, Значение)

    Если Опция = "headers" Тогда

        Значение = OPI_Инструменты.JSONСтрокой(Новый Структура("Authorization", "***"));

    Иначе
        Возврат;
    КонецЕсли;

КонецПроцедуры

Процедура ОбработатьСекретыVK(Знач Опция, Значение)

    Если Опция = "ct" Тогда

        Значение = "***";

    КонецЕсли;

КонецПроцедуры

#КонецОбласти

#КонецОбласти

