From 2f3acf62de264da0bd25a8fe16200ac85371eb2e Mon Sep 17 00:00:00 2001 From: Vitaly the Alpaca Date: Sat, 4 May 2024 17:43:50 +0000 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B5=D0=BE=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20OPI=20->=20OInt=20?= =?UTF-8?q?(workflow)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/oint_test.yml | 44 +++++- OInt/core/Modules/OPI_GoogleWorkspace.os | 15 +- OInt/core/Modules/OPI_Telegram.os | 13 +- OInt/tests/Modules/internal/OPI_Тесты.os | 138 ++++++++++++++++++ .../Modules/OPI_ПолучениеДанныхТестов.os | 6 + OInt/tools/Modules/OPI_ПреобразованиеТипов.os | 1 + 6 files changed, 210 insertions(+), 7 deletions(-) diff --git a/.github/workflows/oint_test.yml b/.github/workflows/oint_test.yml index cd17a0b0b3..fd9bca4d42 100644 --- a/.github/workflows/oint_test.yml +++ b/.github/workflows/oint_test.yml @@ -623,6 +623,48 @@ jobs: run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ГД_СоздатьКаталог" + Testing-GoogleSheets: + runs-on: ubuntu-latest + needs: Testing-GoogleWorkspace + steps: + + - uses: actions/checkout@v2 + - uses: otymko/setup-onescript@v1.4 + with: + version: 1.9.0 + + - name: Получить тестовые данные из кэша + uses: actions/cache/restore@v3 + with: + key: test-data + path: ./data.json + + - name: Установить asserts и 1testrunner + run: | + opm install asserts + opm install 1testrunner + + - name: Установить OInt + run: | + cd ./OInt + opm build + opm install *.ospx + + + + - 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 "ГТ_ПолучитьТаблицу" + + - name: Заполнить/Очистить ячейки + if: ${{ cancelled() }} == false + run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./OInt/tests/Modules/internal/OPI_Тесты.os "ГТ_ЗаполнитьОчиститьЯчейки" + + Testing-Notion: runs-on: ubuntu-latest needs: [Decode, Build] @@ -811,7 +853,7 @@ jobs: Clear-Cache: runs-on: ubuntu-latest - needs: [Testing-Telegram, Testing-VK, Testing-Viber, Testing-Twitter, Testing-YandexDisk, Testing-GoogleWorkspace, Testing-GoogleCalendar, Testing-GoogleDrive, Testing-Notion, Testing-Slack, Encode] + needs: [Testing-Telegram, Testing-VK, Testing-Viber, Testing-Twitter, Testing-YandexDisk, Testing-GoogleWorkspace, Testing-GoogleCalendar, Testing-GoogleDrive, Testing-GoogleSheets, Testing-Notion, Testing-Slack, Encode] if: ${{ always() }} steps: - name: Очистка основного кэша diff --git a/OInt/core/Modules/OPI_GoogleWorkspace.os b/OInt/core/Modules/OPI_GoogleWorkspace.os index 1e19520f92..c8212b3e8a 100644 --- a/OInt/core/Modules/OPI_GoogleWorkspace.os +++ b/OInt/core/Modules/OPI_GoogleWorkspace.os @@ -40,13 +40,18 @@ // ClientID - Строка - Client ID - id // Calendar - Булево - разрешение на методы Calendar - calendar // Drive - Булево - разрешение на методы Drive - drive +// Sheets - Булево - разрешение на методы Sheets - sheets // // Возвращаемое значение: // Строка - Ссылка получения кода -Функция СформироватьСсылкуПолученияКода(Знач ClientID, Знач Calendar = Истина, Знач Drive = Истина) Экспорт +Функция СформироватьСсылкуПолученияКода(Знач ClientID + , Знач Calendar = Истина + , Знач Drive = Истина + , Знач Sheets = Истина) Экспорт OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientID); OPI_ПреобразованиеТипов.ПолучитьБулево(Calendar); + OPI_ПреобразованиеТипов.ПолучитьБулево(Sheets); OPI_ПреобразованиеТипов.ПолучитьБулево(Drive); URL = "https://accounts.google.com/o/oauth2/auth"; @@ -56,7 +61,7 @@ ПараметрыURL.Вставить("client_id" , ClientID); ПараметрыURL.Вставить("redirect_uri" , "http://localhost"); ПараметрыURL.Вставить("access_type" , "offline"); - ПараметрыURL.Вставить("scope" , ПолучитьСписокРазрешений(Calendar, Drive)); + ПараметрыURL.Вставить("scope" , ПолучитьСписокРазрешений(Calendar, Drive, Sheets)); URL = URL + OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL); @@ -144,7 +149,7 @@ #Область СлужебныеПроцедурыИфункции -Функция ПолучитьСписокРазрешений(Calendar, Drive) +Функция ПолучитьСписокРазрешений(Calendar, Drive, Sheets) МассивРазрешений = Новый Массив; @@ -156,6 +161,10 @@ МассивРазрешений.Добавить("https://www.googleapis.com/auth/drive"); КонецЕсли; + Если Sheets Тогда + МассивРазрешений.Добавить("https://www.googleapis.com/auth/spreadsheets"); + КонецЕсли; + Возврат СтрСоединить(МассивРазрешений, " "); КонецФункции diff --git a/OInt/core/Modules/OPI_Telegram.os b/OInt/core/Modules/OPI_Telegram.os index ed9e0cfa29..17cdb6a1bd 100644 --- a/OInt/core/Modules/OPI_Telegram.os +++ b/OInt/core/Modules/OPI_Telegram.os @@ -61,16 +61,23 @@ // Выполняет запрос /getUpdates, возвращающий информацию о событиях бота. Используется при работе в polling режиме // // Параметры: -// Токен - Строка - Токен бота - token +// Токен - Строка - Токен бота - token +// Таймаут - Строка,Число - Время ожидания новых событий - timeout +// Смещение - Строка,Число - Смещение в списке получаемых сообщений - offset // // Возвращаемое значение: // Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram -Функция ПолучитьОбновления(Знач Токен) Экспорт +Функция ПолучитьОбновления(Знач Токен, Знач Таймаут = 0, Знач Смещение = "") Экспорт OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен); URL = "api.telegram.org/bot" + Токен + "/getUpdates"; - Ответ = OPI_Инструменты.Get(URL); + + Параметры = Новый Структура; + OPI_Инструменты.ДобавитьПоле("timeout", Таймаут , "Строка", Параметры); + OPI_Инструменты.ДобавитьПоле("offset" , Смещение, "Строка", Параметры); + + Ответ = OPI_Инструменты.Get(URL, Параметры); Возврат Ответ; КонецФункции diff --git a/OInt/tests/Modules/internal/OPI_Тесты.os b/OInt/tests/Modules/internal/OPI_Тесты.os index f48dd6f1c1..3ce2217c8d 100644 --- a/OInt/tests/Modules/internal/OPI_Тесты.os +++ b/OInt/tests/Modules/internal/OPI_Тесты.os @@ -2472,6 +2472,144 @@ #КонецОбласти +#Область GoogleSheets + +Процедура ГТ_СоздатьТаблицу() Экспорт + + Токен = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Google_Token"); + Наименование = "Тестовая таблица"; + + МассивЛистов = Новый Массив; + МассивЛистов.Добавить("Лист1"); + МассивЛистов.Добавить("Лист2"); + + Результат = OPI_GoogleSheets.СоздатьКнигу(Токен, Наименование, МассивЛистов); + + OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьКнигу"); + + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["properties"]["title"]).Равно(Наименование); + + Для Н = 0 По МассивЛистов.ВГраница() Цикл + + ИмяЛиста = Результат["sheets"][Н]["properties"]["title"]; + OPI_ПолучениеДанныхТестов.ОжидаетЧто(ИмяЛиста).Равно(МассивЛистов[Н]); + Лист = Результат["sheets"][Н]["properties"]["sheetId"]; + Лист = OPI_Инструменты.ЧислоВСтроку(Лист); + + КонецЦикла; + + Книга = Результат["spreadsheetId"]; + + OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("GS_Spreadsheet", Книга); + OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("GS_Sheet" , Лист); + + Результат = OPI_GoogleSheets.СоздатьКнигу(Токен, Наименование, МассивЛистов); + Книга2 = Результат["spreadsheetId"]; + + Результат = OPI_GoogleSheets.КопироватьЛист(Токен, Книга, Книга2, Лист); + + OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "КопироватьЛист"); + + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["title"]).Равно(ИмяЛиста + " (копия)"); + + Наименование = "Тестовый лист"; + + Результат = OPI_GoogleSheets.ДобавитьЛист(Токен, Книга, Наименование); + + OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьЛист"); + + НовыйЛист = Результат["replies"][0]["addSheet"]["properties"]["sheetId"]; + НовыйЛист = OPI_Инструменты.ЧислоВСтроку(НовыйЛист); + + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["spreadsheetId"]).Равно(Книга); + + Результат = OPI_GoogleSheets.УдалитьЛист(Токен, Книга, НовыйЛист); + + OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьЛист"); + + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["spreadsheetId"]).Равно(Книга); + + Наименование = "Тестовая таблица (изм.)"; + + Результат = OPI_GoogleSheets.ИзменитьНаименованиеКниги(Токен, Книга, Наименование); + + OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ИзменитьНаименованиеКниги"); + + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["spreadsheetId"]).Равно(Книга); + +КонецПроцедуры + +Процедура ГТ_ПолучитьТаблицу() Экспорт + + Токен = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Google_Token"); + Книга = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("GS_Spreadsheet"); + Наименование = "Тестовая таблица"; + + Результат = OPI_GoogleSheets.ПолучитьКнигу(Токен, Книга); + + OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьТаблицу"); + + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["properties"]["title"]).Равно(Наименование); + +КонецПроцедуры + +Процедура ГТ_ЗаполнитьОчиститьЯчейки() Экспорт + + Токен = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Google_Token"); + Книга = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("GS_Spreadsheet"); + Лист = "Лист2"; + + СтруктураЯчеек = Новый Соответствие; + СтруктураЯчеек.Вставить("A1", "Это A1"); + СтруктураЯчеек.Вставить("A2", "Это A2"); + СтруктураЯчеек.Вставить("B2", "Это B2"); + СтруктураЯчеек.Вставить("B3", "Это B3"); + СтруктураЯчеек.Вставить("A3", "Это A3"); + СтруктураЯчеек.Вставить("A4", "Это A4"); + СтруктураЯчеек.Вставить("B1", "Это B1"); + СтруктураЯчеек.Вставить("B4", "Это B4"); + + МассивЯчеек = Новый Массив; + МассивЯчеек.Добавить("B2"); + МассивЯчеек.Добавить("A3"); + МассивЯчеек.Добавить("B4"); + + Результат = OPI_GoogleSheets.УстановитьЗначенияЯчеек(Токен, Книга, СтруктураЯчеек, Лист); + + OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УстановитьЗначенияЯчеек"); + + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["spreadsheetId"]).Равно(Книга); + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["totalUpdatedCells"]).Равно(СтруктураЯчеек.Количество()); + + Результат = OPI_GoogleSheets.ПолучитьЗначенияЯчеек(Токен, Книга, МассивЯчеек, Лист); + + OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьЗначенияЯчеек"); + + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["spreadsheetId"]).Равно(Книга); + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["valueRanges"].Количество()).Равно(МассивЯчеек.Количество()); + + Результат = OPI_GoogleSheets.ПолучитьЗначенияЯчеек(Токен, Книга, , Лист); + + OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьЗначенияЯчеек"); + + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["spreadsheetId"]).Равно(Книга); + + МассивЯчеек = Новый Массив; + МассивЯчеек.Добавить("B2"); + МассивЯчеек.Добавить("A3"); + МассивЯчеек.Добавить("B4"); + + Результат = OPI_GoogleSheets.ОчиститьЯчейки(Токен, Книга, МассивЯчеек, Лист); + + OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОчиститьЯчейки"); + + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["spreadsheetId"]).Равно(Книга); + OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["clearedRanges"].Количество()).Равно(МассивЯчеек.Количество()); + +КонецПроцедуры + +#КонецОбласти + #Область Twitter Процедура Твиттер_ПолучитьСсылкуАвторизации() Экспорт diff --git a/OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os b/OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os index 949bc4a6a1..48f5351b82 100644 --- a/OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os +++ b/OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os @@ -52,6 +52,7 @@ Разделы.Вставить("GoogleWorkspace", СтандартныеЗависимости); Разделы.Вставить("GoogleCalendar" , ЗависимостиГугл); Разделы.Вставить("GoogleDrive" , ЗависимостиГугл); + Разделы.Вставить("GoogleSheets" , ЗависимостиГугл); Разделы.Вставить("Notion" , СтандартныеЗависимости); Разделы.Вставить("Slack" , СтандартныеЗависимости); @@ -71,6 +72,7 @@ ВСпейс = "GoogleWorkspace"; Ноушн = "Notion"; Слак = "Slack"; + Таблицы = "GoogleSheets"; ТаблицаТестов = Новый ТаблицаЗначений; ТаблицаТестов.Колонки.Добавить("Метод"); @@ -146,6 +148,10 @@ НовыйТест(ТаблицаТестов, "ГД_СоздатьУдалитьКомментарий" , "Создать/Удалить кооментарий" , Драйв); НовыйТест(ТаблицаТестов, "ГД_СоздатьКаталог" , "Создать/Удалить каталог" , Драйв); + НовыйТест(ТаблицаТестов, "ГТ_СоздатьТаблицу" , "Создать таблицу" , Таблицы); + НовыйТест(ТаблицаТестов, "ГТ_ПолучитьТаблицу" , "Получить таблицу" , Таблицы); + НовыйТест(ТаблицаТестов, "ГТ_ЗаполнитьОчиститьЯчейки" , "Заполнить/Очистить ячейки" , Таблицы); + НовыйТест(ТаблицаТестов, "Твиттер_ПолучитьСсылкуАвторизации" , "Получить ссылку авторизации" , Твиттер); НовыйТест(ТаблицаТестов, "Твиттер_ОбновитьТокен" , "Обновить токен" , Твиттер); НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТекстовыйТвит" , "Текстовый твит" , Твиттер); diff --git a/OInt/tools/Modules/OPI_ПреобразованиеТипов.os b/OInt/tools/Modules/OPI_ПреобразованиеТипов.os index 5234d92422..af83e30615 100644 --- a/OInt/tools/Modules/OPI_ПреобразованиеТипов.os +++ b/OInt/tools/Modules/OPI_ПреобразованиеТипов.os @@ -291,4 +291,5 @@ Или ТипЗнч(Значение) = Тип("Дата"); КонецФункции + #КонецОбласти