1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2024-11-30 08:36:50 +02:00

Мокирование HTTPСервисЗапрос

This commit is contained in:
Корякин Алексей 2023-02-15 00:25:07 +03:00
parent c705ca5716
commit 077ee79295
8 changed files with 390 additions and 0 deletions

View File

@ -379,6 +379,18 @@
КонецПроцедуры
#Если Сервер Тогда
// Возвращает мок для HTTPСервисЗапрос.
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок
Функция HTTPСервисЗапрос() Экспорт
Возврат Обработки.ЮТHTTPСервисЗапрос.Создать();
КонецФункции
#КонецЕсли
#КонецОбласти
/////////////////////////////////////////////////////////////////////////////////

View File

@ -71,5 +71,6 @@
<commonModules>CommonModule.ЮТФильтрация</commonModules>
<commonModules>CommonModule.ЮТЧитатель</commonModules>
<commonModules>CommonModule.ЮТЧитательСервер</commonModules>
<dataProcessors>DataProcessor.ЮТHTTPСервисЗапрос</dataProcessors>
<dataProcessors>DataProcessor.ЮТЮнитТесты</dataProcessors>
</mdclass:Configuration>

View File

@ -0,0 +1,252 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2023 BIA-Technologies Limited Liability Company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
//©///////////////////////////////////////////////////////////////////////////©//
#Если Сервер Тогда
#Область ОписаниеПеременных
//@skip-check object-module-export-variable
Перем HTTPМетод Экспорт;
//@skip-check object-module-export-variable
Перем БазовыйURL Экспорт;
//@skip-check object-module-export-variable
Перем Заголовки Экспорт;
//@skip-check object-module-export-variable
Перем ОтносительныйURL Экспорт;
//@skip-check object-module-export-variable
Перем ПараметрыURL Экспорт;
//@skip-check object-module-export-variable
Перем ПараметрыЗапроса Экспорт;
Перем Тело;
#КонецОбласти
#Область ПрограммныйИнтерфейс
// Возвращает тело как двоичные данные.
//
// Возвращаемое значение:
// ДвоичныеДанные - Тело
Функция ПолучитьТелоКакДвоичныеДанные() Экспорт
ТипТела = ТипЗнч(Тело);
Если Тело = Неопределено Тогда
Возврат ПолучитьДвоичныеДанныеИзBase64Строки("");
ИначеЕсли ТипТела = Тип("ДвоичныеДанные") Тогда
Возврат Тело;
ИначеЕсли ТипТела = Тип("Строка") Тогда
Возврат ПолучитьДвоичныеДанныеИзСтроки(Тело);
КонецЕсли;
КонецФункции
// Возвращает тело как поток.
//
// Возвращаемое значение:
// Поток - Тело
Функция ПолучитьТелоКакПоток() Экспорт
Возврат ПолучитьТелоКакДвоичныеДанные().ОткрытьПотокДляЧтения();
КонецФункции
// Возвращает тело как строку.
//
// Параметры:
// Кодировка - КодировкаТекста, Строка - Кодировка
//
// Возвращаемое значение:
// Строка - Тело
Функция ПолучитьТелоКакСтроку(Кодировка = Неопределено) Экспорт
ТипТела = ТипЗнч(Тело);
Если Тело = Неопределено Тогда
Возврат "";
ИначеЕсли ТипТела = Тип("ДвоичныеДанные") Тогда
Возврат ПолучитьСтрокуИзДвоичныхДанных(Тело, Кодировка);
ИначеЕсли ТипТела = Тип("Строка") Тогда
Возврат Тело;
КонецЕсли;
КонецФункции
// Устанавливает тело как двоичные данные.
// При получении тела в другом формате происходит конвертация
//
// Параметры:
// Данные - ДвоичныеДанные
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок
Функция УстановитьТелоКакДвоичныеДанные(Данные) Экспорт
Тело = Данные;
Возврат ЭтотОбъект;
КонецФункции
// Устанавливает тело как строку.
// При получении тела в другом формате происходит конвертация
//
// Параметры:
// Строка - Строка
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок
Функция УстановитьТелоКакСтроку(Строка) Экспорт
Тело = Строка;
Возврат ЭтотОбъект;
КонецФункции
// Устанавливает тело как строку JSON.
// Сериализует переданный объект в строку JSON и сохраняет в тело
// При получении тела в другом формате происходит конвертация
//
// Параметры:
// Данные - Произвольный
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок
Функция УстановитьТелоКакСтрокуJSON(Данные) Экспорт
ЗаписьJSON = Новый ЗаписьJSON();
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Данные);
Тело = ЗаписьJSON.Закрыть();
Возврат ЭтотОбъект;
КонецФункции
// Добавляет заголовок.
//
// Параметры:
// ИмяЗаголовка - Строка
// Значение - Строка
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок
Функция ДобавитьЗаголовок(ИмяЗаголовка, Значение) Экспорт
Заголовки.Вставить(ИмяЗаголовка, Значение);
Возврат ЭтотОбъект;
КонецФункции
// Добавляет параметр запроса.
//
// Параметры:
// ИмяПараметра - Строка
// Значение - Строка
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок
Функция ДобавитьПараметрЗапроса(ИмяПараметра, Значение) Экспорт
ПараметрыЗапроса.Вставить(ИмяПараметра, Значение);
Возврат ЭтотОбъект;
КонецФункции
// Добавляет параметр URL.
//
// Параметры:
// ИмяПараметра - Строка
// Значение - Строка
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок
Функция ДобавитьПараметрURL(ИмяПараметра, Значение) Экспорт
ПараметрыURL.Вставить(ИмяПараметра, Значение);
Возврат ЭтотОбъект;
КонецФункции
// Устанавливает HTTP метод
//
// Параметры:
// Значение - Строка - Имя http метода
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок
Функция Метод(Значение) Экспорт
HTTPМетод = Значение;
Возврат ЭтотОбъект;
КонецФункции
// Устанавливает базовый URL.
//
// Параметры:
// Значение - Строка - базовый URL
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок
Функция БазовыйURL(Значение) Экспорт
БазовыйURL = Значение;
Возврат ЭтотОбъект;
КонецФункции
// Устанавливает относительный URL.
//
// Параметры:
// Значение - Строка - относительный URL
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок
Функция ОтносительныйURL(Значение) Экспорт
ОтносительныйURL = Значение;
Возврат ЭтотОбъект;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура Инициализировать()
HTTPМетод = "GET";
БазовыйURL = "";
Заголовки = Новый Соответствие();
ОтносительныйURL = "";
ПараметрыURL = Новый Соответствие();
ПараметрыЗапроса = Новый Соответствие();
КонецПроцедуры
#КонецОбласти
#Область Инициализация
Инициализировать();
#КонецОбласти
#КонецЕсли

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:DataProcessor xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="81c2b3c4-8e40-4811-aab0-e7a1371d0c51">
<producedTypes>
<objectType typeId="5b53c341-183f-4aa0-b3ec-1f355d0f74f5" valueTypeId="26dcab52-beab-4c30-aa64-02887735d56e"/>
<managerType typeId="d0cecbc4-c89f-4ef2-ab8d-10bcfd8c514c" valueTypeId="50afe94b-4ccb-4a26-9a80-01121c6fef66"/>
</producedTypes>
<name>ЮТHTTPСервисЗапрос</name>
<synonym>
<key>ru</key>
<value>Мок для HTTPСервис запрос</value>
</synonym>
<useStandardCommands>true</useStandardCommands>
</mdclass:DataProcessor>

View File

@ -14,10 +14,15 @@
<content>CommonModule.ЮТИсполнитель</content>
<content>CommonModule.ЮТИсполнительСервер</content>
<content>CommonModule.ЮТКонструкторВариантов</content>
<content>CommonModule.ЮТКонструкторТестовыхДанных</content>
<content>CommonModule.ЮТКонтекст</content>
<content>CommonModule.ЮТКонтекстКлиент</content>
<content>CommonModule.ЮТКонтекстСервер</content>
<content>CommonModule.ЮТКонтекстТеста</content>
<content>CommonModule.ЮТЛогирование</content>
<content>CommonModule.ЮТЛогированиеВызовСервера</content>
<content>CommonModule.ЮТМетаданные</content>
<content>CommonModule.ЮТМетаданныеПовтИсп</content>
<content>CommonModule.ЮТМетаданныеСервер</content>
<content>CommonModule.ЮТОбщий</content>
<content>CommonModule.ЮТОбщийВызовСервера</content>
@ -31,6 +36,7 @@
<content>CommonModule.ЮТСобытия</content>
<content>CommonModule.ЮТТестовыеДанные</content>
<content>CommonModule.ЮТТестовыеДанныеВызовСервера</content>
<content>CommonModule.ЮТТестовыеДанныеСлужебный</content>
<content>CommonModule.ЮТТесты</content>
<content>CommonModule.ЮТУтверждения</content>
<content>CommonModule.ЮТФабрика</content>
@ -43,5 +49,7 @@
<content>CommonPicture.ЮТУпал</content>
<content>CommonPicture.ЮТУспешно</content>
<content>CommonPicture.ЮТЭлементыТестов</content>
<content>DataProcessor.ЮТHTTPСервисЗапрос</content>
<content>DataProcessor.ЮТЮнитТесты</content>
<content>CommonTemplate.ЮТОписаниеМетаданных</content>
</mdclass:Subsystem>

View File

@ -0,0 +1,94 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2023 BIA-Technologies Limited Liability Company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
//©///////////////////////////////////////////////////////////////////////////©//
/////////////////////////////////////////////////////////////////////////////////
// Экспортные процедуры и функции, предназначенные для использования другими
// объектами конфигурации или другими программами
/////////////////////////////////////////////////////////////////////////////////
#Область СлужебныйПрограммныйИнтерфейс
Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты
.ДобавитьТест("Конструктор")
.ДобавитьТест("УстановитьТело")
;
КонецПроцедуры
Процедура Конструктор() Экспорт
Запрос = ЮТест.Данные().HTTPСервисЗапрос()
.ДобавитьЗаголовок("Заголовок", "Заголовок")
.ДобавитьПараметрЗапроса("Параметр1", 1)
.ДобавитьПараметрURL("Параметр2", 2)
.Метод("GET");
ЮТест.ОжидаетЧто(Запрос)
.Свойство("HTTPМетод").Равно("GET")
.Свойство("Заголовки.Заголовок").Равно("Заголовок")
.Свойство("ПараметрыЗапроса.Параметр1").Равно(1)
.Свойство("ПараметрыURL.Параметр2").Равно(2);
КонецПроцедуры
Процедура УстановитьТело() Экспорт
Описание = "Тело не установлено";
Запрос = ЮТест.Данные().HTTPСервисЗапрос();
ЮТест.ОжидаетЧто(Запрос, Описание)
.Метод("ПолучитьТелоКакДвоичныеДанные").НеВыбрасываетИсключение()
.Метод("ПолучитьТелоКакПоток").НеВыбрасываетИсключение()
.Метод("ПолучитьТелоКакСтроку").НеВыбрасываетИсключение()
.Метод("ПолучитьТелоКакСтроку", ЮТОбщий.ЗначениеВМассиве(КодировкаТекста.UTF8)).НеВыбрасываетИсключение();
ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакСтроку()).Равно("");
Тело = "Тело";
ДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки(Тело);
Описание = "Тело установлено из двоичных данных";
Запрос = ЮТест.Данные().HTTPСервисЗапрос()
.УстановитьТелоКакДвоичныеДанные(ДвоичныеДанные);
ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакДвоичныеДанные(), Описание + ". Получение двоичных данных").Равно(ДвоичныеДанные);
ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакСтроку(), Описание + ". Получение строки").Равно(Тело);
ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакСтроку("UTF-8"), Описание + ". Получение строки UTF-8").Равно(Тело);
ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакПоток(), Описание + ". Получение потока").ИмеетТип("Поток");
Описание = "Тело установлено из строки";
Запрос = ЮТест.Данные().HTTPСервисЗапрос()
.УстановитьТелоКакСтроку(Тело);
ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакДвоичныеДанные(), Описание + ". Получение двоичных данных").Равно(ДвоичныеДанные);
ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакСтроку(), Описание + ". Получение строки").Равно(Тело);
ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакСтроку("UTF-8"), Описание + ". Получение строки UTF-8").Равно(Тело);
ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакПоток(), Описание + ". Получение потока").ИмеетТип("Поток");
Описание = "Тело установлено из JSON";
Запрос = ЮТест.Данные().HTTPСервисЗапрос()
.УстановитьТелоКакСтрокуJSON(Новый Массив());
ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакСтроку(), Описание + ". Получение строки").Равно("[]");
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#КонецОбласти

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="2d597d20-67f3-47c7-96e0-c0e0241f0e9b">
<name>Обр_ЮТHTTPСервисЗапрос</name>
<synonym>
<key>ru</key>
<value>Обр HTTPСервис запрос</value>
</synonym>
<server>true</server>
</mdclass:CommonModule>

View File

@ -24,6 +24,7 @@
<languageCode>ru</languageCode>
</languages>
<commonModules>CommonModule.Интеграция</commonModules>
<commonModules>CommonModule.Обр_ЮТHTTPСервисЗапрос</commonModules>
<commonModules>CommonModule.ОМ_Мокито</commonModules>
<commonModules>CommonModule.ОМ_МокитоОбучение</commonModules>
<commonModules>CommonModule.ОМ_Общий</commonModules>