diff --git a/.github/workflows/oint_test_Dropbox.yml b/.github/workflows/oint_test_Dropbox.yml index 837612071..995a10919 100644 --- a/.github/workflows/oint_test_Dropbox.yml +++ b/.github/workflows/oint_test_Dropbox.yml @@ -103,6 +103,10 @@ 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: Записать логи uses: actions/upload-artifact@v4 diff --git a/.github/workflows/oint_test_full.yml b/.github/workflows/oint_test_full.yml index 67a090156..2bbba9e4a 100644 --- a/.github/workflows/oint_test_full.yml +++ b/.github/workflows/oint_test_full.yml @@ -909,6 +909,10 @@ 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: Записать логи uses: actions/upload-artifact@v4 diff --git a/OInt/core/Modules/OPI_Dropbox.os b/OInt/core/Modules/OPI_Dropbox.os index d7585c8f8..75c94682a 100644 --- a/OInt/core/Modules/OPI_Dropbox.os +++ b/OInt/core/Modules/OPI_Dropbox.os @@ -568,6 +568,147 @@ #КонецОбласти +#Область НастройкиСовместногоДоступа + +// Опубликовать папку +// Переводит каталог в режим публичного доступа +// +// Параметры: +// Токен - Строка - Токен - token +// Путь - Строка - Путь к целевому каталогу - path +// +// Возвращаемое значение: +// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox +Функция ОпубликоватьПапку(Знач Токен, Знач Путь) Экспорт + + URL = "https://api.dropboxapi.com/2/sharing/share_folder"; + Ответ = ОбработатьОбъект(Токен, URL, Путь); + + Возврат Ответ; + +КонецФункции + +// Отменить публикацию папки +// Отменяет режим общего доступа для каталога +// +// Параметры: +// Токен - Строка - Токен - token +// IDПапки - Строка - ID публичного каталога (shared folder ID) - folder +// +// Возвращаемое значение: +// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox +Функция ОтменитьПубликациюПапки(Знач Токен, Знач IDПапки) Экспорт + + URL = "https://api.dropboxapi.com/2/sharing/unshare_folder"; + + Параметры = Новый Структура; + OPI_Инструменты.ДобавитьПоле("shared_folder_id", IDПапки, "Строка", Параметры); + + Заголовки = ПолучитьЗаголовкиЗапроса(Токен); + Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); + + Возврат Ответ; + +КонецФункции + +// Добавить пользователя к файлу +// Определяет доступ к файлу для стороннего пользователя +// +// Параметры: +// Токен - Строка - Токен - token +// IDФайла - Строка - ID файла, к которому предоставляется доступ - fileid +// АдресаПочты - Строка, Массив Из Строка - Список адресов почты добавляемых пользователей - emails +// ТолькоПросмотр - Булево - Запрещает редактирование файла для стороннего пользователя - readonly +// +// Возвращаемое значение: +// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox +Функция ДобавитьПользователейКФайлу(Знач Токен, Знач IDФайла, Знач АдресаПочты, Знач ТолькоПросмотр = Истина) Экспорт + + OPI_ПреобразованиеТипов.ПолучитьМассив(АдресаПочты); + OPI_ПреобразованиеТипов.ПолучитьСтроку(IDФайла); + OPI_ПреобразованиеТипов.ПолучитьБулево(ТолькоПросмотр); + + Если Не СтрНачинаетсяС(IDФайла, "id:") Тогда + IDФайла = "id:" + IDФайла; + КонецЕсли; + + URL = "https://api.dropboxapi.com/2/sharing/add_file_member"; + + МассивПользователей = Новый Массив; + + Для Каждого Адрес Из АдресаПочты Цикл + + ДанныеПользователя = Новый Соответствие; + OPI_Инструменты.ДобавитьПоле(".tag" , "email", "Строка", ДанныеПользователя); + OPI_Инструменты.ДобавитьПоле("email", Адрес , "Строка", ДанныеПользователя); + + МассивПользователей.Добавить(ДанныеПользователя); + + КонецЦикла; + + Параметры = Новый Структура; + OPI_Инструменты.ДобавитьПоле("file" , IDФайла , "Строка", Параметры); + OPI_Инструменты.ДобавитьПоле("members", МассивПользователей , "Массив", Параметры); + + Режим = ?(ТолькоПросмотр, "viewer", "editor"); + + OPI_Инструменты.ДобавитьПоле("access_level", Режим , "Строка", Параметры); + + Заголовки = ПолучитьЗаголовкиЗапроса(Токен); + + Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); + + Возврат Ответ; + +КонецФункции + +// Добавить пользователей к папке +// Предоставляет стороннии пользователям доступ к каталогу +// +// Параметры: +// Токен - Строка - Токен - token +// IDПапки - Строка - ID публичного каталога (shared folder ID) - folder +// АдресаПочты - Строка, Массив Из Строка - Список адресов почты добавляемых пользователей - emails +// ТолькоПросмотр - Булево - Запрещает редактирование файла для стороннего пользователя - readonly +// +// Возвращаемое значение: +// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox +Функция ДобавитьПользователейКПапке(Знач Токен, Знач IDПапки, Знач АдресаПочты, Знач ТолькоПросмотр = Истина) Экспорт + + OPI_ПреобразованиеТипов.ПолучитьМассив(АдресаПочты); + OPI_ПреобразованиеТипов.ПолучитьБулево(ТолькоПросмотр); + Режим = ?(ТолькоПросмотр, "viewer", "editor"); + + URL = "https://api.dropboxapi.com/2/sharing/add_folder_member"; + + МассивПользователей = Новый Массив; + + Для Каждого Адрес Из АдресаПочты Цикл + + ДанныеПользователя = Новый Соответствие; + OPI_Инструменты.ДобавитьПоле(".tag" , "email", "Строка", ДанныеПользователя); + OPI_Инструменты.ДобавитьПоле("email", Адрес , "Строка", ДанныеПользователя); + + СтруктураПользователя = Новый Структура("member,access_level", ДанныеПользователя, Режим); + + МассивПользователей.Добавить(СтруктураПользователя); + + КонецЦикла; + + Параметры = Новый Структура; + OPI_Инструменты.ДобавитьПоле("shared_folder_id", IDПапки , "Строка", Параметры); + OPI_Инструменты.ДобавитьПоле("members" , МассивПользователей , "Массив", Параметры); + + Заголовки = ПолучитьЗаголовкиЗапроса(Токен); + + Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); + + Возврат Ответ; + +КонецФункции + +#КонецОбласти + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/OInt/tests/Modules/internal/OPI_Тесты.os b/OInt/tests/Modules/internal/OPI_Тесты.os index 72b26883d..a1d0fbd7b 100644 --- a/OInt/tests/Modules/internal/OPI_Тесты.os +++ b/OInt/tests/Modules/internal/OPI_Тесты.os @@ -3215,6 +3215,20 @@ КонецПроцедуры +Процедура ДропБокс_РаботаСДоступами() Экспорт + + ПараметрыТеста = Новый Структура; + OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Dropbox_Token" , ПараметрыТеста); + OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Dropbox_OtherUser", ПараметрыТеста); + OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Dropbox_FileID" , ПараметрыТеста); + + Dropbox_ДобавитьПользователейКФайлу(ПараметрыТеста); + Dropbox_ОпубликоватьПапку(ПараметрыТеста); + Dropbox_ДобавитьПользователейКПапке(ПараметрыТеста); + Dropbox_ОтменитьПубликациюПапки(ПараметрыТеста); + +КонецПроцедуры + #КонецОбласти #КонецОбласти @@ -3582,6 +3596,17 @@ OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["used"]).Заполнено(); КонецПроцедуры +Процедура Проверка_ДропбоксУчастник(Знач Результат, Знач Почта, Знач ТолькоПросмотр) + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[0]["result"][".tag"]).Равно("success"); + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат[0]["member"]["email"]).Равно(Почта); + OPI_ПолучениеДанныхТестов.ОжидаетЧто( + Результат[0]["result"]["success"][".tag"]).Равно(?(ТолькоПросмотр, "viewer", "editor")); +КонецПроцедуры + +Процедура Проверка_ДропбоксПубличнаяПапка(Знач Результат) + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["shared_folder_id"]).Заполнено(); +КонецПроцедуры + #КонецОбласти #Область АтомарныеТесты @@ -5135,6 +5160,91 @@ КонецПроцедуры +Процедура Dropbox_ДобавитьПользователейКФайлу(ПараметрыФункции) + + Токен = ПараметрыФункции["Dropbox_Token"]; + Почта = ПараметрыФункции["Dropbox_OtherUser"]; + Файл = ПараметрыФункции["Dropbox_FileID"]; + + Результат = OPI_Dropbox.ДобавитьПользователейКФайлу(Токен, Файл, Почта, Ложь); + + // END + + OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьПользователяКФайлу"); + + Проверка_ДропбоксУчастник(Результат, Почта, Ложь); + + Почты = Новый Массив; + Почты.Добавить(Почта); + + Результат = OPI_Dropbox.ДобавитьПользователейКФайлу(Токен, Файл, Почты, Истина); + + Проверка_ДропбоксУчастник(Результат, Почта, Истина); + +КонецПроцедуры + +Процедура Dropbox_ОпубликоватьПапку(ПараметрыФункции) + + Токен = ПараметрыФункции["Dropbox_Token"]; + Путь = "/New"; + + Результат = OPI_Dropbox.ОпубликоватьПапку(Токен, Путь); + + // END + + OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОпубликоватьПапку"); + + //Проверка_ДропБоксПубличнаяПапка(Результат); + + IDПапки = Результат["shared_folder_id"]; + + ПараметрыФункции.Вставить("Dropbox_SharedFolder", IDПапки); + OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("Dropbox_SharedFolder", IDПапки); + + OPI_Инструменты.Пауза(5); + +КонецПроцедуры + +Процедура Dropbox_ОтменитьПубликациюПапки(ПараметрыФункции) + + Токен = ПараметрыФункции["Dropbox_Token"]; + Папка = ПараметрыФункции["Dropbox_SharedFolder"]; + + Результат = OPI_Dropbox.ОтменитьПубликациюПапки(Токен, Папка); + + // END + + OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтменитьПубликациюПапки"); + + Проверка_ДропБоксСтатус(Результат); + + OPI_Инструменты.Пауза(5); + +КонецПроцедуры + +Процедура Dropbox_ДобавитьПользователейКПапке(ПараметрыФункции) + + Токен = ПараметрыФункции["Dropbox_Token"]; + Почта = ПараметрыФункции["Dropbox_OtherUser"]; + Папка = ПараметрыФункции["Dropbox_SharedFolder"]; // shared_folder_id + + Результат = OPI_Dropbox.ДобавитьПользователейКПапке(Токен, Папка, Почта, Ложь); + + // END + + OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьПользователяКФайлу"); + + Проверка_ДропбоксУчастник(Результат, Почта, Ложь); + + Почты = Новый Массив; + Почты.Добавить(Почта); + + Результат = OPI_Dropbox.ДобавитьПользователейКПапке(Токен, Папка, Почты, Истина); + + Проверка_ДропбоксУчастник(Результат, Почта, Истина); + +КонецПроцедуры + #КонецОбласти #КонецОбласти diff --git a/OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os b/OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os index 31576ebe1..7a25be52b 100644 --- a/OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os +++ b/OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os @@ -212,6 +212,7 @@ НовыйТест(ТаблицаТестов, "ДропБокс_СоздатьКаталог" , "Создать каталог" , ДропБокс); НовыйТест(ТаблицаТестов, "ДропБокс_СоздатьУдалитьТег" , "Создать/Удалить тег" , ДропБокс); НовыйТест(ТаблицаТестов, "ДропБокс_ПолучитьАккаунт" , "Получить данные аккаунта" , ДропБокс); + НовыйТест(ТаблицаТестов, "ДропБокс_РаботаСДоступами" , "Работа с доступами" , ДропБокс); Возврат ТаблицаТестов;