diff --git a/OPI/src/CommonModules/OPI_Slack/Module.bsl b/OPI/src/CommonModules/OPI_Slack/Module.bsl index a029f924511..13071a5a581 100644 --- a/OPI/src/CommonModules/OPI_Slack/Module.bsl +++ b/OPI/src/CommonModules/OPI_Slack/Module.bsl @@ -805,6 +805,126 @@ #КонецОбласти +#Область РаботаСУдаленнымиФайлами + +// Получить список внешних файлов +// Получает список внешних файлов пользователя или канала +// +// Параметры: +// Токен - Строка - Токен бота - token +// Канал - Строка - Канал для отбора - channel +// Курсор - Строка - Указатель из предыдущего запроса, если строк результата > 100 - cursor +// +// Возвращаемое значение: +// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack +Функция ПолучитьСписокВнешнихФайлов(Знач Токен, Знач Канал = "", Знач Курсор = "") Экспорт + + URL = "https://slack.com/api/files.remote.list"; + Заголовки = ПолучитьЗаголовокАвторизации(Токен); + + Параметры = Новый Структура; + OPI_Инструменты.ДобавитьПоле("channel", Канал , "Строка", Параметры); + OPI_Инструменты.ДобавитьПоле("cursor" , Курсор, "Строка", Параметры); + + Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки); + + Возврат Ответ; + +КонецФункции + +// Получить внешний файл +// Получает информацию о внешнем файле +// +// Параметры: +// Токен - Строка - Токен бота - token +// ИдентификаторФайла - Строка - Идентификатор файла - fileid +// +// Возвращаемое значение: +// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack +Функция ПолучитьВнешнийФайл(Знач Токен, Знач ИдентификаторФайла) Экспорт + + URL = "https://slack.com/api/files.remote.info"; + Ответ = УправлениеВнешнимФайлом(Токен, ИдентификаторФайла, URL); + + Возврат Ответ; + +КонецФункции + +// Добавить внешний файл +// Добавляет новый внешний файл +// +// Параметры: +// Токен - Строка - Токен бота - token +// URL - Строка - URL к внешнему файлу - url +// Заголовок - Строка - Заголовок файла для Slack - title +// +// Возвращаемое значение: +// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack +Функция ДобавитьВнешнийФайл(Знач Токен, Знач URL, Знач Заголовок) Экспорт + + URL = "https://slack.com/api/files.remote.add"; + Заголовки = ПолучитьЗаголовокАвторизации(Токен); + UID = Строка(Новый УникальныйИдентификатор()); + + Параметры = Новый Структура; + OPI_Инструменты.ДобавитьПоле("external_url", URL , "Строка", Параметры); + OPI_Инструменты.ДобавитьПоле("external_id" , UID , "Строка", Параметры); + OPI_Инструменты.ДобавитьПоле("title" , Заголовок , "Строка", Параметры); + + Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки); + + Возврат Ответ; + +КонецФункции + +// Отправить внешний файл +// Отправляет внейшний файл по списку каналов +// +// Параметры: +// Токен - Строка - Токен бота - token +// ИдентификаторФайла - Строка - Идентификатор файла - fileid +// МассивКаналов - Массив Из Строка - Массив каналов для отправки - channels +// +// Возвращаемое значение: +// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack +Функция ОтправитьВнешнийФайл(Знач Токен, Знач ИдентификаторФайла, Знач МассивКаналов) Экспорт + + URL = "https://slack.com/api/files.remote.share"; + Заголовки = ПолучитьЗаголовокАвторизации(Токен); + + OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивКаналов); + МассивКаналов = СтрСоединить(МассивКаналов, ","); + + Параметры = Новый Структура; + OPI_Инструменты.ДобавитьПоле("file" , ИдентификаторФайла , "Строка", Параметры); + OPI_Инструменты.ДобавитьПоле("channels", МассивКаналов , "Строка", Параметры); + + Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки); + + Возврат Ответ; + +КонецФункции + +// Удалить внешний файл +// Удаляет внешний файл из Slack +// +// Параметры: +// Токен - Строка - Токен бота - token +// ИдентификаторФайла - Строка - Идентификатор файла - fileid +// +// Возвращаемое значение: +// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack +Функция УдалитьВнешнийФайл(Знач Токен, Знач ИдентификаторФайла) Экспорт + + URL = "https://slack.com/api/files.remote.remove"; + Ответ = УправлениеВнешнимФайлом(Токен, ИдентификаторФайла, URL); + + Возврат Ответ; + +КонецФункции + +#КонецОбласти + #Область ФормированиеБлоков // Сформировать блок картинку @@ -881,4 +1001,17 @@ КонецФункции +Функция УправлениеВнешнимФайлом(Знач Токен, Знач ИдентификаторФайла, Знач URL) + + Заголовки = ПолучитьЗаголовокАвторизации(Токен); + + Параметры = Новый Структура; + OPI_Инструменты.ДобавитьПоле("file", ИдентификаторФайла , "Строка", Параметры); + + Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки); + + Возврат Ответ; + +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/OPI/src/CommonModules/OPI_ПолучениеДанныхТестов/Module.bsl b/OPI/src/CommonModules/OPI_ПолучениеДанныхТестов/Module.bsl index 586e98f704e..ce772fc5381 100644 --- a/OPI/src/CommonModules/OPI_ПолучениеДанныхТестов/Module.bsl +++ b/OPI/src/CommonModules/OPI_ПолучениеДанныхТестов/Module.bsl @@ -184,6 +184,8 @@ НовыйТест(ТаблицаТестов, "Слак_ОткрытьЗакрытьДиалог" , "Открыть/Закрыть диалог" , Слак); НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокФайлов" , "Получить список файлов" , Слак); НовыйТест(ТаблицаТестов, "Слак_ЗагрузитьУдалитьФайл" , "Загрузить/Удалить файл" , Слак); + НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокВФ" , "Получить список внеш. файлов" , Слак); + НовыйТест(ТаблицаТестов, "Слак_ЗагрузитьУдалитьВФ" , "Загрузить/Удалить внеш. файл" , Слак); Возврат ТаблицаТестов; diff --git a/OPI/src/CommonModules/OPI_Тесты/Module.bsl b/OPI/src/CommonModules/OPI_Тесты/Module.bsl index 526de39ddf9..2241ded8c43 100644 --- a/OPI/src/CommonModules/OPI_Тесты/Module.bsl +++ b/OPI/src/CommonModules/OPI_Тесты/Module.bsl @@ -3191,20 +3191,7 @@ Проверка_СлакОк(Результат); OPI_ПолучениеДанныхТестов.ОжидаетЧто(ЗагруженныйФайл["name"]).Равно(ИмяФайла); - - Результат = OPI_Slack.СделатьФайлПубличным(Токен, ЗагруженныйФайл["id"]); - - // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СделатьФайлПубличным"); - - Проверка_СлакОк(Результат); - OPI_ПолучениеДанныхТестов.ОжидаетЧто(ЗагруженныйФайл["permalink_public"]).Заполнено(); - - Результат = OPI_Slack.СделатьФайлПриватным(Токен, ЗагруженныйФайл["id"]); - - // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СделатьФайлПриватным"); - - Проверка_СлакОк(Результат); - + Для Каждого ЗагруженныйФайл Из МассивФайлов Цикл Результат = OPI_Slack.УдалитьФайл(Токен, ЗагруженныйФайл); @@ -3217,6 +3204,65 @@ КонецПроцедуры +Процедура Слак_ПолучитьСписокВФ() Экспорт + + Токен = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Token"); + Канал = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Channel"); + + Результат = OPI_Slack.ПолучитьСписокВнешнихФайлов(Токен); + + // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокВнешнихФайлов"); + + Проверка_СлакОк(Результат); + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["files"]).ИмеетТип("Массив"); + + Результат = OPI_Slack.ПолучитьСписокВнешнихФайлов(Токен, Канал); + + // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокВнешнихФайлов"); + + Проверка_СлакОк(Результат); + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["files"]).ИмеетТип("Массив"); +КонецПроцедуры + +Процедура Слак_ЗагрузитьУдалитьВФ() Экспорт + + Токен = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Token"); + Файл = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Document"); + Канал = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Slack_Channel"); + Заголовок = "Новый файл"; + + Результат = OPI_Slack.ДобавитьВнешнийФайл(Токен, Файл, Заголовок); + + // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьВнешнийФайл"); + + ЗагруженныйФайл = Результат["file"]; + + Проверка_СлакОк(Результат); + OPI_ПолучениеДанныхТестов.ОжидаетЧто(ЗагруженныйФайл["title"]).Равно(Заголовок); + + Результат = OPI_Slack.ПолучитьВнешнийФайл(Токен, ЗагруженныйФайл["id"]); + + // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьВнешнийФайл"); + + ЗагруженныйФайл = Результат["file"]; + + Проверка_СлакОк(Результат); + OPI_ПолучениеДанныхТестов.ОжидаетЧто(ЗагруженныйФайл["title"]).Равно(Заголовок); + + Результат = OPI_Slack.ОтправитьВнешнийФайл(Токен, ЗагруженныйФайл["id"], Канал); + + // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьВнешнийФайл"); + + Проверка_СлакОк(Результат); + + Результат = OPI_Slack.УдалитьВнешнийФайл(Токен, ЗагруженныйФайл["id"]); + + // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьВнешнийФайл"); + + Проверка_СлакОк(Результат); + +КонецПроцедуры + #КонецОбласти #КонецОбласти