diff --git a/OPI/src/CommonModules/OPI_Airtable/Module.bsl b/OPI/src/CommonModules/OPI_Airtable/Module.bsl index a59e321d3e..29ae739225 100644 --- a/OPI/src/CommonModules/OPI_Airtable/Module.bsl +++ b/OPI/src/CommonModules/OPI_Airtable/Module.bsl @@ -35,6 +35,35 @@ #Область РаботаСБазами +Функция ПолучитьСписокБаз(Знач Токен, Знач Отступ = "") Экспорт + + OPI_ПреобразованиеТипов.ПолучитьСтроку(Отступ); + + URL = "https://api.airtable.com/v0/meta/bases"; + Заголовки = ПолучитьЗаголовокАвторизации(Токен); + Параметры = Новый Структура; + + OPI_Инструменты.ДобавитьПоле("offset", Отступ, "Строка", Параметры); + + Ответ = OPI_Инструменты.Get(URL, Параметры, Заголовки); + + Возврат Ответ; + +КонецФункции + +Функция ПолучитьТаблицыБазы(Знач Токен, Знач База) Экспорт + + OPI_ПреобразованиеТипов.ПолучитьСтроку(База); + + URL = "https://api.airtable.com/v0/meta/bases/" + База + "/tables"; + Заголовки = ПолучитьЗаголовокАвторизации(Токен); + + Ответ = OPI_Инструменты.Get(URL, , Заголовки); + + Возврат Ответ; + +КонецФункции + Функция СоздатьБазу(Знач Токен, Знач РабочееПространство, Знач Наименование, Знач КоллекцияТаблиц) Экспорт OPI_ПреобразованиеТипов.ПолучитьКоллекцию(КоллекцияТаблиц); @@ -70,7 +99,90 @@ #КонецОбласти -#Область ФормированиеПолей +#Область РаботаСТаблицами + +Функция СоздатьТаблицу(Знач Токен, Знач База, Знач Наименование, Знач МассивПолей, Знач Описание = "") Экспорт + + OPI_ПреобразованиеТипов.ПолучитьСтроку(База); + + URL = "https://api.airtable.com/v0/meta/bases/" + База + "/tables"; + Заголовки = ПолучитьЗаголовокАвторизации(Токен); + Параметры = СформироватьОписаниеТаблицы(Наименование, МассивПолей, Описание); + + Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки); + + Возврат Ответ; + +КонецФункции + +Функция ИзменитьТаблицу(Знач Токен, Знач База, Знач Таблица, Знач Наименование = "", Знач Описание = "") Экспорт + + OPI_ПреобразованиеТипов.ПолучитьСтроку(База); + OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица); + + URL = "https://api.airtable.com/v0/meta/bases/" + База + "/tables/" + Таблица; + Заголовки = ПолучитьЗаголовокАвторизации(Токен); + Параметры = Новый Структура; + + OPI_Инструменты.ДобавитьПоле("name" , Наименование, "Строка", Параметры); + OPI_Инструменты.ДобавитьПоле("description", Описание , "Строка", Параметры); + + Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки); + + Возврат Ответ; + +КонецФункции + +#КонецОбласти + +#Область РаботаСПолями + +Функция СоздатьПоле(Знач Токен, Знач База, Знач Таблица, Знач СтруктураПоля) Экспорт + + OPI_ПреобразованиеТипов.ПолучитьСтроку(База); + OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица); + OPI_ПреобразованиеТипов.ПолучитьКоллекцию(СтруктураПоля); + + Если Не ТипЗнч(СтруктураПоля) = Тип("Структура") + И Не ТипЗнч(СтруктураПоля) = Тип("Соответствие") Тогда + + ВызватьИсключение "Ошибка в данных описания поля"; + + КонецЕсли; + + URL = "https://api.airtable.com/v0/meta/bases/" + База + "/tables/" + Таблица + "/fields"; + Заголовки = ПолучитьЗаголовокАвторизации(Токен); + + Ответ = OPI_Инструменты.Post(URL, СтруктураПоля, Заголовки); + + Возврат Ответ; + +КонецФункции + +Функция ИзменитьПоле(Знач Токен, Знач База, Знач Таблица, Знач Поле, Знач Наименование = "", Знач Описание = "") Экспорт + + OPI_ПреобразованиеТипов.ПолучитьСтроку(База); + OPI_ПреобразованиеТипов.ПолучитьСтроку(Таблица); + OPI_ПреобразованиеТипов.ПолучитьСтроку(Поле); + + URL = "https://api.airtable.com/v0/meta/bases/" + + База + + "/tables/" + + Таблица + + "/fields/" + + Поле; + + Заголовки = ПолучитьЗаголовокАвторизации(Токен); + + Параметры = Новый Структура(); + OPI_Инструменты.ДобавитьПоле("name" , Наименование, "Строка", Параметры); + OPI_Инструменты.ДобавитьПоле("description", Описание , "Строка", Параметры); + + Ответ = OPI_Инструменты.Patch(URL, Параметры, Заголовки); + + Возврат Ответ; + +КонецФункции Функция ПолучитьПолеСтроковое(Знач Наименование) Экспорт Возврат ОписаниеПримитовногоПоля(Наименование, "richText"); @@ -103,13 +215,15 @@ КонецФункции -Функция СформироватьОписаниеТаблицы(Знач Наименование, Знач МассивПолей) +Функция СформироватьОписаниеТаблицы(Знач Наименование, Знач МассивПолей, Знач Описание = "") OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивПолей); ОписаниеТаблицы = Новый Структура("name,fields", Наименование, МассивПолей); + OPI_Инструменты.ДобавитьПоле("description", Описание, "Строка", ОписаниеТаблицы); + Возврат ОписаниеТаблицы; КонецФункции diff --git a/OPI/src/CommonModules/OPI_ПолучениеДанныхТестов/Module.bsl b/OPI/src/CommonModules/OPI_ПолучениеДанныхТестов/Module.bsl index 663ecf7021..2eb2049e99 100644 --- a/OPI/src/CommonModules/OPI_ПолучениеДанныхТестов/Module.bsl +++ b/OPI/src/CommonModules/OPI_ПолучениеДанныхТестов/Module.bsl @@ -196,11 +196,13 @@ НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокВФ" , "Получить список внеш. файлов" , Слак); НовыйТест(ТаблицаТестов, "Слак_ЗагрузитьУдалитьВФ" , "Загрузить/Удалить внеш. файл" , Слак); - НовыйТест(ТаблицаТестов, "АТ_СоздатьБазу" , "Создать базу" , АирТ); + НовыйТест(ТаблицаТестов, "АТ_СоздатьБазу" , "Создать/Изменить базу" , АирТ); + НовыйТест(ТаблицаТестов, "АТ_СоздатьТаблицу" , "Создать/Изменить таблицу" , АирТ); + НовыйТест(ТаблицаТестов, "АТ_СоздатьПоле" , "Создать/Изменить поле" , АирТ); Возврат ТаблицаТестов; - -КонецФункции + +КонецФункции Функция ОжидаетЧто(Значение) Экспорт diff --git a/OPI/src/CommonModules/OPI_Тесты/Module.bsl b/OPI/src/CommonModules/OPI_Тесты/Module.bsl index 75070d5252..a0aab2eb7b 100644 --- a/OPI/src/CommonModules/OPI_Тесты/Module.bsl +++ b/OPI/src/CommonModules/OPI_Тесты/Module.bsl @@ -3476,18 +3476,100 @@ Наименование = "Тестовая база"; МассивПолей = Новый Массив; - МассивПолей.Добавить(OPI_Airtable.ПолучитьПолеНомера("Автономер")); + МассивПолей.Добавить(OPI_Airtable.ПолучитьПолеНомера("Номер")); МассивПолей.Добавить(OPI_Airtable.ПолучитьПолеСтроковое("Строковое")); + ИмяТаблицы = "Тестовая таблица"; + СоответствиеТаблиц = Новый Соответствие; - СоответствиеТаблиц.Вставить("Тестовая таблица", МассивПолей); + СоответствиеТаблиц.Вставить(ИмяТаблицы, МассивПолей); Результат = OPI_Airtable.СоздатьБазу(Токен, Область, Наименование, СоответствиеТаблиц); - // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьИнформациюОБоте"); + // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьБазу"); OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["id"]).Заполнено(); - OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["tables"][0]["name"]).Равно(Наименование); + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["tables"][0]["name"]).Равно(ИмяТаблицы); + + База = Результат["id"]; + OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("Airtable_Base", База); + + Результат = OPI_Airtable.ПолучитьТаблицыБазы(Токен, База); + + // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьТаблицыБазы"); + + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["tables"]).Заполнено(); + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["tables"]).ИмеетТип("Массив"); + + Результат = OPI_Airtable.ПолучитьСписокБаз(Токен); + + // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСписокБаз"); + + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["bases"]).Заполнено(); + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["bases"]).ИмеетТип("Массив"); + +КонецПроцедуры + +Процедура АТ_СоздатьТаблицу() Экспорт + + Токен = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Airtable_Token"); + База = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Airtable_Base"); + + МассивПолей = Новый Массив; + МассивПолей.Добавить(OPI_Airtable.ПолучитьПолеНомера("Номер")); + МассивПолей.Добавить(OPI_Airtable.ПолучитьПолеСтроковое("Строковое")); + + ИмяТаблицы = "Тестовая таблица 2"; + Описание = "Новая таблица"; + + Результат = OPI_Airtable.СоздатьТаблицу(Токен, База, ИмяТаблицы, МассивПолей, Описание); + + // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьТаблицу"); + + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["name"]).Равно(ИмяТаблицы); + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["description"]).Равно(Описание); + + Таблица = Результат["id"]; + ИмяТаблицы = "Тестовая таблица 2 (изм.)"; + Описание = "Новая таблица (изм.)"; + + OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("Airtable_Table", Таблица); + + Результат = OPI_Airtable.ИзменитьТаблицу(Токен, База, Таблица, ИмяТаблицы, Описание); + + // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ИзменитьТаблицу"); + + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["name"]).Равно(ИмяТаблицы); + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["description"]).Равно(Описание); + + +КонецПроцедуры + +Процедура АТ_СоздатьПоле() Экспорт + + Токен = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Airtable_Token"); + База = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Airtable_Base"); + Таблица = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Airtable_Table"); + Имя = Строка(Новый УникальныйИдентификатор); + + Поле = OPI_Airtable.ПолучитьПолеНомера(Имя); + + Результат = OPI_Airtable.СоздатьПоле(Токен, База, Таблица, Поле); + + // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьПоле"); + + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["name"]).Равно(Имя); + + Поле = Результат["id"]; + Имя = Имя + "(изм.)"; + Описание = "Новое описание"; + + Результат = OPI_Airtable.ИзменитьПоле(Токен, База, Таблица, Поле, Имя, Описание); + + // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ИзменитьПоле"); + + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["name"]).Равно(Имя); + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["description"]).Равно(Описание); КонецПроцедуры