diff --git a/exts/yaxunit/src/CommonModules/ЮТКонструкторТестовыхДанныхСлужебный/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТКонструкторТестовыхДанныхСлужебный/Module.bsl index 7a04b4b0..0cfef846 100644 --- a/exts/yaxunit/src/CommonModules/ЮТКонструкторТестовыхДанныхСлужебный/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТКонструкторТестовыхДанныхСлужебный/Module.bsl @@ -30,7 +30,9 @@ КонецПроцедуры -Процедура Фикция(Контекст, ИмяРеквизита, РеквизитыЗаполнения = Неопределено) Экспорт +Процедура Фикция(Контекст, ИмяРеквизита, РеквизитыЗаполнения, Знач ОграничениеТипа) Экспорт + + ЮТПроверкиСлужебный.ПроверитьТипПараметра(ОграничениеТипа, "Тип, ОписаниеТипов, Строка", "Фикция", "ЮТКонструкторТестовыхДанных", Истина); Если ЗначениеЗаполнено(Контекст.ТекущаяТабличнаяЧасть) Тогда ОписаниеРеквизита = Контекст.Метаданные.ТабличныеЧасти[Контекст.ТекущаяТабличнаяЧасть][ИмяРеквизита]; @@ -40,7 +42,14 @@ ТекущаяЗапись = Контекст.Данные; КонецЕсли; - Значение = ЮТТестовыеДанныеСлужебный.Фикция(ОписаниеРеквизита.Тип, РеквизитыЗаполнения); + Если ОграничениеТипа <> Неопределено Тогда + ПолноеИмяРеквизита = ЮТОбщий.ДобавитьСтроку(Контекст.ТекущаяТабличнаяЧасть, ИмяРеквизита, "."); + ТипЗначения = ПересечениеТипов(ОписаниеРеквизита.Тип, ОграничениеТипа, ПолноеИмяРеквизита); + Иначе + ТипЗначения = ОписаниеРеквизита.Тип; + КонецЕсли; + + Значение = ЮТТестовыеДанныеСлужебный.Фикция(ТипЗначения, РеквизитыЗаполнения); ТекущаяЗапись.Вставить(ИмяРеквизита, Значение); КонецПроцедуры @@ -197,4 +206,39 @@ КонецФункции +Функция ПересечениеТипов(Знач ОписаниеТипов, Знач ОграничениеТипов, ИмяРеквизита) + + ТипОграничения = ТипЗнч(ОграничениеТипов); + + Если ТипОграничения = Тип("Строка") Тогда + ОграничениеТипов = Новый ОписаниеТипов(ОграничениеТипов); + ТипОграничения = Тип("ОписаниеТипов"); + КонецЕсли; + + Если ТипОграничения = Тип("Тип") И ОписаниеТипов.СодержитТип(ОграничениеТипов) И ОграничениеТипов <> Тип("Неопределено") Тогда + Результат = ЮТОбщий.ЗначениеВМассиве(ОграничениеТипов); + ИначеЕсли ТипОграничения = Тип("ОписаниеТипов") Тогда + Результат = ЮТОбщий.ПересечениеМассивов(ОписаниеТипов.Типы(), ОграничениеТипов.Типы()); + Иначе + Результат = Неопределено; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(Результат) Тогда + + Сообщение = СтрШаблон("Исправьте ограничение типов для реквизита `%1` (`%2`), оно не входит в множество типов реквизита (`%3`)", + ИмяРеквизита, + ОграничениеТипов, + ОписаниеТипов); + ВызватьИсключение Сообщение; + + КонецЕсли; + + Возврат Новый ОписаниеТипов(Результат, + ОписаниеТипов.КвалификаторыЧисла, + ОписаниеТипов.КвалификаторыСтроки, + ОписаниеТипов.КвалификаторыДаты, + ОписаниеТипов.КвалификаторыДвоичныхДанных); + +КонецФункции + #КонецОбласти diff --git a/exts/yaxunit/src/DataProcessors/ЮТКонструкторТестовыхДанных/Forms/КлиентскийКонструктор/Module.bsl b/exts/yaxunit/src/DataProcessors/ЮТКонструкторТестовыхДанных/Forms/КлиентскийКонструктор/Module.bsl index 432a6189..91fc4eaa 100644 --- a/exts/yaxunit/src/DataProcessors/ЮТКонструкторТестовыхДанных/Forms/КлиентскийКонструктор/Module.bsl +++ b/exts/yaxunit/src/DataProcessors/ЮТКонструкторТестовыхДанных/Forms/КлиентскийКонструктор/Module.bsl @@ -59,13 +59,15 @@ // ИмяРеквизита - Строка - Имя реквизита объекта или табличной части // РеквизитыЗаполнения - Структура - Значения реквизитов заполнения создаваемого объекта базы // - Неопределено +// ОграничениеТипа - Тип, ОписаниеТипов - Испольуется для ограничения типа составного реквизита, будет сгерерировано значение указанного типа +// - Неопределено - Будет сгенерировано значение, на основании типа реквизита, если реквизит составной, то будет использован случайный тип // // Возвращаемое значение: // ОбщийМодуль - Конструктор &НаКлиенте -Функция Фикция(ИмяРеквизита, РеквизитыЗаполнения = Неопределено) Экспорт +Функция Фикция(ИмяРеквизита, РеквизитыЗаполнения = Неопределено, ОграничениеТипа = Неопределено) Экспорт - ЮТКонструкторТестовыхДанныхСлужебный.Фикция(Контекст, ИмяРеквизита, РеквизитыЗаполнения); + ЮТКонструкторТестовыхДанныхСлужебный.Фикция(Контекст, ИмяРеквизита, РеквизитыЗаполнения, ОграничениеТипа); Возврат ЭтотОбъект; КонецФункции diff --git a/exts/yaxunit/src/DataProcessors/ЮТКонструкторТестовыхДанных/ObjectModule.bsl b/exts/yaxunit/src/DataProcessors/ЮТКонструкторТестовыхДанных/ObjectModule.bsl index 78f8800e..3858f0e7 100644 --- a/exts/yaxunit/src/DataProcessors/ЮТКонструкторТестовыхДанных/ObjectModule.bsl +++ b/exts/yaxunit/src/DataProcessors/ЮТКонструкторТестовыхДанных/ObjectModule.bsl @@ -58,12 +58,14 @@ // ИмяРеквизита - Строка - Имя реквизита объекта или табличной части // РеквизитыЗаполнения - Структура - Значения реквизитов заполнения создаваемого объекта базы // - Неопределено +// ОграничениеТипа - Тип, ОписаниеТипов - Испольуется для ограничения типа составного реквизита, будет сгерерировано значение указанного типа +// - Неопределено - Будет сгенерировано значение, на основании типа реквизита, если реквизит составной, то будет использован случайный тип // // Возвращаемое значение: // ОбщийМодуль - Конструктор -Функция Фикция(ИмяРеквизита, РеквизитыЗаполнения = Неопределено) Экспорт +Функция Фикция(ИмяРеквизита, РеквизитыЗаполнения = Неопределено, ОграничениеТипа = Неопределено) Экспорт - ЮТКонструкторТестовыхДанныхСлужебный.Фикция(Контекст, ИмяРеквизита, РеквизитыЗаполнения); + ЮТКонструкторТестовыхДанныхСлужебный.Фикция(Контекст, ИмяРеквизита, РеквизитыЗаполнения, ОграничениеТипа); Возврат ЭтотОбъект; КонецФункции diff --git a/tests/src/CommonModules/ОМ_ЮТКонструкторТестовыхДанных/Module.bsl b/tests/src/CommonModules/ОМ_ЮТКонструкторТестовыхДанных/Module.bsl index 89f752a9..de98b8db 100644 --- a/tests/src/CommonModules/ОМ_ЮТКонструкторТестовыхДанных/Module.bsl +++ b/tests/src/CommonModules/ОМ_ЮТКонструкторТестовыхДанных/Module.bsl @@ -24,6 +24,7 @@ .ДобавитьТест("ЗаполнитьСправочник") .ДобавитьТест("ЗаполнитьДокумент") .ДобавитьТест("Фикция") + .ДобавитьТест("Фикция_Типизированная") .ДобавитьТест("ФикцияОбязательныхПолей") .ДобавитьТест("СоздатьГруппу") ; @@ -145,6 +146,48 @@ КонецПроцедуры +Процедура Фикция_Типизированная() Экспорт + + ИмяТипа = "ПланОбменаСсылка.Мобильные"; + Тип = Тип(ИмяТипа); + + Варианты = ЮТест.Варианты("Тип, ОжилаемыйТип, Описание") + .Добавить(ИмяТипа, Тип, "По представлению типа") + .Добавить(Тип, Тип, "По типу") + .Добавить(Новый ОписаниеТипов(ИмяТипа), Тип, "По описаниею типов") + .Добавить("Строка", Тип("Строка"), "Другой тип") + ; + + Для Каждого Вариант Из Варианты.СписокВариантов() Цикл + + Данные = ЮТест.Данные().КонструкторОбъекта("Справочник.МобильныеУстройства") + .Фикция("Подписчик", , Вариант.Тип) + .ДанныеОбъекта(); + + ЮТест.ОжидаетЧто(Данные, Вариант.Описание).Свойство("Подписчик") + .Заполнено() + .ИмеетТип(Вариант.ОжилаемыйТип); + + КонецЦикла; +// + Варианты = ЮТест.Варианты("Тип, Описание") + .Добавить("Дата", "Неподходящий тип") + .Добавить(Новый ОписаниеТипов("Число, Дата"), "Неподходящее описание типов") + .Добавить("Неопределено", "Неопределено") + .Добавить(Тип("Неопределено"), "Тип Неопределено") + ; + + Конструктор = ЮТест.Данные().КонструкторОбъекта("Справочник.МобильныеУстройства"); + + Для Каждого Вариант Из Варианты.СписокВариантов() Цикл + + ЮТест.ОжидаетЧто(Конструктор, Вариант.Описание).Метод("Фикция", ЮТОбщий.ЗначениеВМассиве("Подписчик", Неопределено, Вариант.Тип)) + .ВыбрасываетИсключение("Исправьте ограничение типов для реквизита `Подписчик`"); + + КонецЦикла; + +КонецПроцедуры + Процедура ФикцияОбязательныхПолей() Экспорт Данные = ЮТест.Данные().КонструкторОбъекта("Справочники.Контрагенты")