1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2025-03-17 20:48:01 +02:00
Моки и предикаты, использование при обучении
This commit is contained in:
alkoleft 2023-05-20 01:13:50 +03:00
parent c5ff9475d6
commit daaf564745
7 changed files with 54 additions and 8 deletions

View File

@ -151,7 +151,6 @@
//
// Возвращаемое значение:
// Структура - Описание маски параметра:
// * МаскаСопоставленияПараметров - Булево - Признак, что это маска параметра (значение: `Истина`)
// * Режим - Строка - Тип маски (значение: `Тип`)
// * Приоритет - Число - Приоритет маски, используется если значение подпадает под несколько масок (значение: `10`)
// * Тип - Тип - Тип, которому должен соответствовать параметр

View File

@ -216,15 +216,25 @@
Условия = Новый Массив;
ТипыУсловий = МокитоСлужебный.ТипыУсловийПараметров();
Для Каждого Параметр Из Параметры Цикл
Если МокитоСлужебный.ЭтоМаскаПарамера(Параметр) Тогда
Условия.Добавить(Параметр);
ИначеЕсли ЮТПредикатыКлиентСервер.ЭтоПредикат(Параметр) Тогда
Маска = МокитоСлужебный.ОписаниеМаскиПараметра(ТипыУсловий.Предикат, 90);
Маска.Вставить("Предикат", ЮТПредикатыКлиентСервер.НаборПредикатов(Параметр));
Условия.Добавить(Маска);
Иначе
Условия.Добавить(Новый Структура("Режим, Значение, Приоритет", "Значение", Параметр, 100));
Маска = МокитоСлужебный.ОписаниеМаскиПараметра(ТипыУсловий.Значение, 100);
Маска.Вставить("Значение", Параметр);
Условия.Добавить(Маска);
КонецЕсли;

View File

@ -159,6 +159,7 @@
Типы.Вставить("Значение", "Значение");
Типы.Вставить("Тип", "Тип");
Типы.Вставить("ОписаниеТипа", "ОписаниеТипа");
Типы.Вставить("Предикат", "Предикат");
Возврат Новый ФиксированнаяСтруктура(Типы);
@ -172,12 +173,13 @@
//
// Возвращаемое значение:
// Структура - Описание маски параметра:
// * МаскаСопоставленияПараметров - Булево - Признак, что это маска параметра
// * Режим - Строка - см. ТипыУсловийПараметров
// * Приоритет - Число - Приоритет маски, используется если значение подпадает под несколько масок, чем выше приоритет, тем лучше
Функция ОписаниеМаскиПараметра(ТипУсловия, Приоритет) Экспорт
МаскаПараметра = Новый Структура("МаскаСопоставленияПараметров", Истина);
МаскаПараметра = Новый Структура;
ЮТОбщий.УказатьТипСтруктуры(МаскаПараметра, "МаскаПараметра");
МаскаПараметра.Вставить("Режим", ТипУсловия);
МаскаПараметра.Вставить("Приоритет", Приоритет);
@ -187,7 +189,7 @@
Функция ЭтоМаскаПарамера(Параметр) Экспорт
Возврат ТипЗнч(Параметр) = Тип("Структура") И Параметр.Свойство("МаскаСопоставленияПараметров") И Параметр.МаскаСопоставленияПараметров;
Возврат ТипЗнч(Параметр) = Тип("Структура") И ЮТОбщий.ТипСтруктуры(Параметр) = "МаскаПараметра";
КонецФункции
@ -212,6 +214,11 @@
Совпадает = Условие.Тип.СодержитТип(ТипЗнч(Параметр));
ИначеЕсли Условие.Режим = ТипыУсловий.Предикат Тогда
Результат = ЮТПредикатыКлиентСервер.ПроверитьПредикаты(Параметр, Условие.Предикат);
Совпадает = Результат.Успешно;
КонецЕсли;
Возврат Совпадает;

View File

@ -830,6 +830,18 @@
КонецФункции
Функция ТипСтруктуры(Структура) Экспорт
Возврат ЗначениеСтруктуры(Структура, "__type__");
КонецФункции
Процедура УказатьТипСтруктуры(Структура, ИмяТипа) Экспорт
Структура.Вставить("__type__", ИмяТипа);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции

View File

@ -66,9 +66,9 @@
Если ТипПараметра = Тип("ОбщийМодуль") И Предикаты = ЮТПредикаты Тогда
Результат = ЮТПредикаты.Получить();
ИначеЕсли ТипПараметра = Тип("Массив") Тогда
ИначеЕсли ТипПараметра = Тип("Массив") И (Предикаты.Количество() = 0 ИЛИ ЮТОбщий.ТипСтруктуры(Предикаты[0]) = "Предикат") Тогда
Результат = Предикаты;
ИначеЕсли ТипПараметра = Тип("Структура") Тогда
ИначеЕсли ТипПараметра = Тип("Структура") И ЮТОбщий.ТипСтруктуры(Предикаты) = "Предикат" Тогда
Результат = ЮТОбщий.ЗначениеВМассиве(Предикаты);
Иначе
ВызватьИсключение "Некорректный параметр метода `ЮТПредикатыКлиентСервер.НаборПредикатов`";
@ -78,6 +78,15 @@
КонецФункции
Функция ЭтоПредикат(Предикаты) Экспорт
ТипПараметра = ТипЗнч(Предикаты);
Возврат (ТипПараметра = Тип("ОбщийМодуль") И Предикаты = ЮТПредикаты)
ИЛИ (ТипПараметра = Тип("Массив") И Предикаты.Количество() И ЮТОбщий.ТипСтруктуры(Предикаты[0]) = "Предикат")
ИЛИ (ТипПараметра = Тип("Структура") И ЮТОбщий.ТипСтруктуры(Предикаты) = "Предикат");
КонецФункции
Функция ПредставлениеПредикатов(Знач Предикаты, Разделитель, ШаблонСвойства = "содержит свойство `%1`, которое") Экспорт
Представления = Новый Массив();

View File

@ -645,10 +645,12 @@
// Структура - Выражение предиката:
// * ИмяРеквизита - Неопределено, Строка - Имя проверяемого реквизита
// * ВидСравнения - Строка
// * Значение - Произвольный
// * Значение - Произвольный, Неопределено - Операнд выражения
Функция ВыражениеПредиката(ВидСравнения, ИмяРеквизита = Неопределено, Значение = Неопределено) Экспорт
Выражение = Новый Структура();
ЮТОбщий.УказатьТипСтруктуры(Выражение, "Предикат");
Выражение.Вставить("ИмяРеквизита", ИмяРеквизита);
Выражение.Вставить("ВидСравнения", ВидСравнения);
Выражение.Вставить("Значение", Значение);

View File

@ -27,6 +27,7 @@
.ДобавитьТест("Прогон_НакоплениеСтатистики").СПараметрами(Истина).СПараметрами(Ложь)
.ДобавитьСерверныйТест("МокированиеМетодовСсылочныхОбъектов").ВТранзакции()
.ДобавитьТест("ОшибкаПодбораРеакции")
.ДобавитьТест("ИспользованиеПредикатов")
;
КонецПроцедуры
@ -255,7 +256,13 @@
ЮТУтверждения.Что(Интеграция.ВыполнитьЗапрос("sessions")).Равно(403);
КонецПроцедуры
Процедура ИспользованиеПредикатов() Экспорт
ВызватьИсключение "Не реализовано";
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции