Skip to content

Commit

Permalink
Возможность указывать параметры записи JSON #5
Browse files Browse the repository at this point in the history
  • Loading branch information
vbondarevsky committed Feb 11, 2019
1 parent a3ba731 commit a275bc2
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 9 deletions.
2 changes: 1 addition & 1 deletion packagedef
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Описание.Имя("1connector")
.Версия("1.0.3")
.Версия("1.0.4")
.Автор("Vladimir Bondarevskiy")
.АдресАвтора("[email protected]")
.Описание("Коннектор: удобный HTTP-клиент для OScript")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
Запрос.Вставить("Аутентификация", ВыбратьЗначение(Неопределено, ДополнительныеПараметры, "Аутентификация", Новый Структура));
Запрос.Вставить("Cookies", ВыбратьЗначение(Неопределено, ДополнительныеПараметры, "Cookies", Новый Массив));
Запрос.Вставить("ПараметрыПреобразованияJSON", ВыбратьЗначение(Неопределено, ДополнительныеПараметры, "ПараметрыПреобразованияJSON", Неопределено));
Запрос.Вставить("ПараметрыЗаписиJSON", ВыбратьЗначение(Неопределено, ДополнительныеПараметры, "ПараметрыЗаписиJSON", Неопределено));

ПодготовленныйЗапрос = ПодготовитьЗапрос(Сессия, Запрос);

Expand Down Expand Up @@ -127,7 +128,13 @@
ПодготовленныйЗапрос.Вставить("URL", ПодготовитьURL(Запрос.URL, ПараметрыЗапроса));

ПодготовитьCookies(ПодготовленныйЗапрос);
ПодготовитьТелоЗапроса(ПодготовленныйЗапрос, Запрос.Данные, Запрос.Файлы, Запрос.Json, Запрос.ПараметрыПреобразованияJSON);
ПодготовитьТелоЗапроса(
ПодготовленныйЗапрос,
Запрос.Данные,
Запрос.Файлы,
Запрос.Json,
Запрос.ПараметрыПреобразованияJSON,
Запрос.ПараметрыЗаписиJSON);
ПодготовитьАутентификацию(ПодготовленныйЗапрос);

Возврат ПодготовленныйЗапрос;
Expand Down Expand Up @@ -393,7 +400,7 @@

КонецФункции

Процедура ПодготовитьТелоЗапроса(ПодготовленныйЗапрос, Данные, Файлы, Json, ПараметрыПреобразованияJSON)
Процедура ПодготовитьТелоЗапроса(ПодготовленныйЗапрос, Данные, Файлы, Json, ПараметрыПреобразованияJSON, ПараметрыЗаписиJSON)

HTTPЗапрос = Новый HTTPЗапрос;
HTTPЗапрос.АдресРесурса = СобратьАдресРесурса(
Expand All @@ -412,7 +419,7 @@
ИначеЕсли ЗначениеЗаполнено(Json) Тогда
ContentType = "application/json";
HTTPЗапрос.УстановитьТелоИзСтроки(
ОбъектВJson(Json, ПараметрыПреобразованияJSON),
ОбъектВJson(Json, ПараметрыПреобразованияJSON, ПараметрыЗаписиJSON),
КодировкаТекста.UTF8,
ИспользованиеByteOrderMark.НеИспользовать);
КонецЕсли;
Expand Down Expand Up @@ -978,12 +985,25 @@

КонецФункции

Функция ОбъектВJson(Объект, ПараметрыПреобразования) Экспорт
Функция ОбъектВJson(Объект, Знач ПараметрыПреобразования, Знач ПараметрыЗаписи) Экспорт

ПараметрыПреобразованияJSON = ДополнитьПараметрыПреобразованияJSON(ПараметрыПреобразования);

ПараметрыЗаписи = ДополнитьПараметрыЗаписиJSON(ПараметрыЗаписи);

ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(
ПараметрыЗаписи.ПереносСтрок,
ПараметрыЗаписи.СимволыОтступа,
ПараметрыЗаписи.ИспользоватьДвойныеКавычки,
ПараметрыЗаписи.ЭкранированиеСимволов,
ПараметрыЗаписи.ЭкранироватьУгловыеСкобки,
ПараметрыЗаписи.ЭкранироватьРазделителиСтрок,
ПараметрыЗаписи.ЭкранироватьАмперсанд,
ПараметрыЗаписи.ЭкранироватьОдинарныеКавычки,
ПараметрыЗаписи.ЭкранироватьСлеш);

ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON);
ЗаписатьJSON(ЗаписьJSON, Объект);

Возврат ЗаписьJSON.Закрыть();
Expand Down Expand Up @@ -1023,6 +1043,21 @@

КонецФункции

Функция ДополнитьПараметрыЗаписиJSON(ПараметрыЗаписи)

ПараметрыЗаписиJSON = ПолучитьПараметрыЗаписиJSONПоУмолчанию();
Если ЗначениеЗаполнено(ПараметрыЗаписи) Тогда
Для Каждого Параметр Из ПараметрыЗаписи Цикл
Если ПараметрыЗаписиJSON.Свойство(Параметр.Ключ) Тогда
ПараметрыЗаписиJSON.Вставить(Параметр.Ключ, Параметр.Значение);
КонецЕсли;
КонецЦикла;
КонецЕсли;

Возврат ПараметрыЗаписиJSON;

КонецФункции

Функция РазбитьСтрокуПоСтроке(Знач Строка, Разделитель)

Результат = Новый Массив;
Expand Down Expand Up @@ -1057,4 +1092,21 @@

Возврат ПараметрыПреобразованияПоУмолчанию;

КонецФункции

Функция ПолучитьПараметрыЗаписиJSONПоУмолчанию()

ПараметрыЗаписиJSONПоУмолчанию = Новый Структура;
ПараметрыЗаписиJSONПоУмолчанию.Вставить("ПереносСтрок", ПереносСтрокJSON.Авто);
ПараметрыЗаписиJSONПоУмолчанию.Вставить("СимволыОтступа", " ");
ПараметрыЗаписиJSONПоУмолчанию.Вставить("ИспользоватьДвойныеКавычки", Истина);
ПараметрыЗаписиJSONПоУмолчанию.Вставить("ЭкранированиеСимволов", ЭкранированиеСимволовJSON.Нет);
ПараметрыЗаписиJSONПоУмолчанию.Вставить("ЭкранироватьУгловыеСкобки", Ложь);
ПараметрыЗаписиJSONПоУмолчанию.Вставить("ЭкранироватьРазделителиСтрок", Истина);
ПараметрыЗаписиJSONПоУмолчанию.Вставить("ЭкранироватьАмперсанд", Ложь);
ПараметрыЗаписиJSONПоУмолчанию.Вставить("ЭкранироватьОдинарныеКавычки", Ложь);
ПараметрыЗаписиJSONПоУмолчанию.Вставить("ЭкранироватьСлеш", Ложь);

Возврат ПараметрыЗаписиJSONПоУмолчанию;

КонецФункции
31 changes: 28 additions & 3 deletions tests/connector-test.os
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
Функция ПолучитьСписокТестов(МенеджерТестирования) Экспорт

МассивТестов = Новый Массив;
МассивТестов.Добавить("ТестДолжен_ПроверитьЧтоРаботаютПараметрыЗаписиJson");
МассивТестов.Добавить("ТестДолжен_ПроверитьЧтоРаботаютЗапросыБезУказанияСхемыURL");
МассивТестов.Добавить("ТестДолжен_ПроверитьЧтоРаботаетПередачаПараметровВСтрокуЗапроса");
МассивТестов.Добавить("ТестДолжен_ПроверитьЧтоРаботаетПередачаПараметровВСтрокуЗапросаКомбинированный");
Expand Down Expand Up @@ -36,16 +37,40 @@

КонецФункции

Процедура ТестДолжен_ПроверитьЧтоРаботаютЗапросыБезУказанияСхемыURL() Экспорт
Процедура ТестДолжен_ПроверитьЧтоРаботаютПараметрыЗаписиJson() Экспорт

ПараметрыЗаписиJSON = Новый Структура("ПереносСтрок", ПереносСтрокJSON.Нет);
Json = Новый Структура;
Json.Вставить("field", "value");
Json.Вставить("field2", "value2");
Результат = КоннекторHTTP.Post("http://httpbin.org/anything",, Json, Новый Структура("ПараметрыЗаписиJSON", ПараметрыЗаписиJSON)).Json();
Ожидаем.Что(Результат["data"]).Равно("{""field"":""value"",""field2"":""value2""}");

КонецПроцедуры

Процедура ТестДолжен_ПроверитьЧтоРаботаютЗапросыБезУказанияСхемыURL() Экспорт

Результат = КоннекторHTTP.Get("httpbin.org/get").Json();
Ожидаем.Что(Результат["url"]).Равно("http://httpbin.org/get");

КонецПроцедуры

Процедура ТестДолжен_ПроверитьЧтоРаботаетПередачаПараметровВСтрокуЗапроса() Экспорт

Результат = КоннекторHTTP.Get("httpbin.org/get").Json();
Ожидаем.Что(Результат["url"]).Равно("http://httpbin.org/get");
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("name", СтрРазделить("Иванов,Петров", ","));
ПараметрыЗапроса.Вставить("salary", Формат(100000, "ЧГ="));

Ответ = КоннекторHTTP.Get("https://httpbin.org/anything/params", ПараметрыЗапроса);
Результат = Ответ.Json();

Ожидаем.Что(Ответ.URL).Равно("https://httpbin.org/anything/params?name=%D0%98%D0%B2%D0%B0%D0%BD%D0%BE%D0%B2&name=%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2&salary=100000");
Ожидаем.Что(Результат).ИмеетТип("Соответствие");
Ожидаем.Что(Результат["url"]).Равно("https://httpbin.org/anything/params?name=Иванов&name=Петров&salary=100000");
Ожидаем.Что(Результат["args"]).ИмеетТип("Соответствие");
Ожидаем.Что(Результат["args"]["salary"]).Равно("100000");
Ожидаем.Что(Результат["args"]["name"]).ИмеетТип("Массив");
Ожидаем.Что(СтрСоединить(Результат["args"]["name"], ",")).Равно("Иванов,Петров");

КонецПроцедуры

Expand Down

0 comments on commit a275bc2

Please sign in to comment.