1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2024-11-28 09:08:38 +02:00

Преобразование OPI -> OInt (workflow)

This commit is contained in:
Vitaly the Alpaca 2024-04-24 19:22:42 +00:00 committed by Vitaly the Alpaca (bot)
parent 908ba34418
commit c4e9e8ba40
5 changed files with 263 additions and 0 deletions

View File

@ -750,6 +750,14 @@ jobs:
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Слак_ОткрытьЗакрытьДиалог"
- name: Получить список файлов
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Слак_ПолучитьСписокФайлов"
- name: Загрузить/Удалить файл
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "Слак_ЗагрузитьУдалитьФайл"
Encode:
runs-on: ubuntu-latest
needs: Testing-Twitter

View File

@ -650,6 +650,161 @@
#КонецОбласти
#Область РаботаСФайлами
// Получить список файлов
// Получает список файлов бота или канала
//
// Параметры:
// Токен - Строка - Токен бота - token
// Канал - Строка - Канал для отбора - channel
// НомерСтраницы - Число, Строка - Номер страницы - page
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
Функция ПолучитьСписокФайлов(Знач Токен, Знач Канал = "", Знач НомерСтраницы = 1) Экспорт
URL = "https://slack.com/api/files.list";
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("channel", Канал , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("page" , НомерСтраницы, "Строка", Параметры);
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
Возврат Ответ;
КонецФункции
// Загрузить файл
// Загружает файл на сервера Slack
//
// Параметры:
// Токен - Строка - Токен бота - token
// Файл - Строка,ДвоичныеДанные - Файл для загрузки - file
// ИмяФайла - Строка - Имя файла с расширением - filename
// Заголовок - Строка - Имя файла в Slack - title
// Канал - Строка - ID канала - channel
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
Функция ЗагрузитьФайл(Знач Токен, Знач Файл, Знач ИмяФайла, Знач Заголовок, Знач Канал = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИмяФайла);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Заголовок);
Upload_url = "upload_url";
File_id = "file_id";
URL = "https://slack.com/api/files.getUploadURLExternal";
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Размер = Файл.Размер();
Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("filename", ИмяФайла, "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("length" , Размер , "Строка", Параметры);
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
URL = Ответ[Upload_url];
Идентификатор = Ответ[File_id];
Если Не ЗначениеЗаполнено(URL) Или Не ЗначениеЗаполнено(Идентификатор) Тогда
Возврат Ответ;
КонецЕсли;
Файлы = Новый Соответствие;
Файлы.Вставить(ИмяФайла, Файл);
Ответ = OPI_Инструменты.PostMultipart(URL, , Файлы, , Заголовки);
URL = "https://slack.com/api/files.completeUploadExternal";
ФайлСлак = Новый Структура("id, title", Идентификатор, Заголовок);
Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("filename" , ИмяФайла, "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("channel_id", Канал , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("files" , ФайлСлак, "Массив", Параметры);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ;
КонецФункции
// Получить данные файла
// Получает информацию о файле
//
// Параметры:
// Токен - Строка - Токен бота - token
// ИдентификаторФайла - Строка - Идентификатор файла - fileid
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
Функция ПолучитьДанныеФайла(Знач Токен, Знач ИдентификаторФайла) Экспорт
URL = "https://slack.com/api/files.info";
Ответ = УправлениеФайлом(Токен, ИдентификаторФайла, URL, "GET");
Возврат Ответ;
КонецФункции
// Удалить файл
// Удаляет файл на Slack
//
// Параметры:
// Токен - Строка - Токен бота - token
// ИдентификаторФайла - Строка - Идентификатор файла - fileid
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
Функция УдалитьФайл(Знач Токен, Знач ИдентификаторФайла) Экспорт
URL = "https://slack.com/api/files.delete";
Ответ = УправлениеФайлом(Токен, ИдентификаторФайла, URL);
Возврат Ответ;
КонецФункции
// Сделать файл публичным
// Создает публичный URL для файла. Требует токен пользователя
//
// Параметры:
// Токен - Строка - Токен пользователя - token
// ИдентификаторФайла - Строка - Идентификатор файла - fileid
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
Функция СделатьФайлПубличным(Знач Токен, Знач ИдентификаторФайла) Экспорт
URL = "https://slack.com/api/files.sharedPublicURL";
Ответ = УправлениеФайлом(Токен, ИдентификаторФайла, URL);
Возврат Ответ;
КонецФункции
// Сделать файл приватным
// Удаляет публичный URL у файла. Требует токен пользователя
//
// Параметры:
// Токен - Строка - Токен пользователя - token
// ИдентификаторФайла - Строка - Идентификатор файла - fileid
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
Функция СделатьФайлПриватным(Знач Токен, Знач ИдентификаторФайла) Экспорт
URL = "https://slack.com/api/files.revokePublicURL";
Ответ = УправлениеФайлом(Токен, ИдентификаторФайла, URL);
Возврат Ответ;
КонецФункции
#КонецОбласти
#Область ФормированиеБлоков
// Сформировать блок картинку
@ -708,4 +863,22 @@
КонецФункции
Функция УправлениеФайлом(Знач Токен, Знач ИдентификаторФайла, Знач URL, Знач ВидЗапроса = "POST")
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
ВидЗапроса = вРег(ВидЗапроса);
Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("file", ИдентификаторФайла , "Строка", Параметры);
Если ВидЗапроса = "POST" Тогда
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Иначе
Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки);
КонецЕсли;
Возврат Ответ;
КонецФункции
#КонецОбласти

View File

@ -3140,6 +3140,83 @@
КонецПроцедуры
Процедура Слак_ПолучитьСписокФайлов() Экспорт
Токен = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Token");
Канал = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Channel");
Результат = OPI_Slack.ПолучитьСписокФайлов(Токен, Канал);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокФайлов");
Проверка_СлакОк(Результат);
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["files"]).ИмеетТип("Массив");
КонецПроцедуры
Процедура Слак_ЗагрузитьУдалитьФайл() Экспорт
Токен = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Token");
Файл = OPI_ПолучениеДанныхТестов.ПолучитьДвоичные("Document");
Канал = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Channel");
МассивФайлов = Новый Массив;
ИмяФайла = "megadoc.docx";
Заголовок = "Новый файл";
Результат = OPI_Slack.ЗагрузитьФайл(Токен, Файл, ИмяФайла, Заголовок);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ЗагрузитьФайл");
ЗагруженныйФайл = Результат["files"][0];
МассивФайлов.Добавить(ЗагруженныйФайл["id"]);
Проверка_СлакОк(Результат);
OPI_ПолучениеДанныхТестов.ОжидаетЧто(ЗагруженныйФайл["name"]).Равно(ИмяФайла);
Результат = OPI_Slack.ЗагрузитьФайл(Токен, Файл, ИмяФайла, Заголовок, Канал);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ЗагрузитьФайл");
ЗагруженныйФайл = Результат["files"][0];
МассивФайлов.Добавить(ЗагруженныйФайл["id"]);
Проверка_СлакОк(Результат);
OPI_ПолучениеДанныхТестов.ОжидаетЧто(ЗагруженныйФайл["name"]).Равно(ИмяФайла);
Результат = OPI_Slack.ПолучитьДанныеФайла(Токен, ЗагруженныйФайл["id"]);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьФайл");
ЗагруженныйФайл = Результат["file"];
Проверка_СлакОк(Результат);
OPI_ПолучениеДанныхТестов.ОжидаетЧто(ЗагруженныйФайл["name"]).Равно(ИмяФайла);
Результат = OPI_Slack.СделатьФайлПубличным(Токен, ЗагруженныйФайл["id"]);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СделатьФайлПубличным");
Проверка_СлакОк(Результат);
OPI_ПолучениеДанныхТестов.ОжидаетЧто(ЗагруженныйФайл["permalink_public"]).Заполнено();
Результат = OPI_Slack.СделатьФайлПриватным(Токен, ЗагруженныйФайл["id"]);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СделатьФайлПриватным");
Проверка_СлакОк(Результат);
Для Каждого ЗагруженныйФайл Из МассивФайлов Цикл
Результат = OPI_Slack.УдалитьФайл(Токен, ЗагруженныйФайл);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьФайл");
Проверка_СлакОк(Результат);
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#КонецОбласти

View File

@ -182,6 +182,8 @@
НовыйТест(ТаблицаТестов, "Слак_СоздатьАрхивироватьКанал" , "Создать/Архивировать канал" , Слак);
НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокКаналов" , "Получить список каналов" , Слак);
НовыйТест(ТаблицаТестов, "Слак_ОткрытьЗакрытьДиалог" , "Открыть/Закрыть диалог" , Слак);
НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокФайлов" , "Получить список файлов" , Слак);
НовыйТест(ТаблицаТестов, "Слак_ЗагрузитьУдалитьФайл" , "Загрузить/Удалить файл" , Слак);
Возврат ТаблицаТестов;

View File

@ -421,6 +421,9 @@
ИначеЕсли Тип = "СтрокаФайла" Тогда
OPI_ПреобразованиеТипов.ПолучитьСтроку(Значение, Истина);
ИначеЕсли Тип = "Массив" Тогда
OPI_ПреобразованиеТипов.ПолучитьМассив(Значение);
Иначе
OPI_ПреобразованиеТипов.ПолучитьСтроку(Значение);