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-09-05 01:16:38 +03:00
parent 586d0093da
commit b5973d9af4
4 changed files with 97 additions and 6 deletions

View File

@ -30,7 +30,9 @@
КонецПроцедуры
Процедура Фикция(Контекст, ИмяРеквизита, РеквизитыЗаполнения = Неопределено) Экспорт
Процедура Фикция(Контекст, ИмяРеквизита, РеквизитыЗаполнения, Знач ОграничениеТипа) Экспорт
ЮТПроверкиСлужебный.ПроверитьТипПараметра(ОграничениеТипа, "Тип, ОписаниеТипов, Строка", "Фикция", "ЮТКонструкторТестовыхДанных", Истина);
Если ЗначениеЗаполнено(Контекст.ТекущаяТабличнаяЧасть) Тогда
ОписаниеРеквизита = Контекст.Метаданные.ТабличныеЧасти[Контекст.ТекущаяТабличнаяЧасть][ИмяРеквизита];
@ -40,7 +42,14 @@
ТекущаяЗапись = Контекст.Данные;
КонецЕсли;
Значение = ЮТТестовыеДанныеСлужебный.Фикция(ОписаниеРеквизита.Тип, РеквизитыЗаполнения);
Если ОграничениеТипа <> Неопределено Тогда
ПолноеИмяРеквизита = ЮТОбщий.ДобавитьСтроку(Контекст.ТекущаяТабличнаяЧасть, ИмяРеквизита, ".");
ТипЗначения = ПересечениеТипов(ОписаниеРеквизита.Тип, ОграничениеТипа, ПолноеИмяРеквизита);
Иначе
ТипЗначения = ОписаниеРеквизита.Тип;
КонецЕсли;
Значение = ЮТТестовыеДанныеСлужебный.Фикция(ТипЗначения, РеквизитыЗаполнения);
ТекущаяЗапись.Вставить(ИмяРеквизита, Значение);
КонецПроцедуры
@ -197,4 +206,39 @@
КонецФункции
Функция ПересечениеТипов(Знач ОписаниеТипов, Знач ОграничениеТипов, ИмяРеквизита)
ТипОграничения = ТипЗнч(ОграничениеТипов);
Если ТипОграничения = Тип("Строка") Тогда
ОграничениеТипов = Новый ОписаниеТипов(ОграничениеТипов);
ТипОграничения = Тип("ОписаниеТипов");
КонецЕсли;
Если ТипОграничения = Тип("Тип") И ОписаниеТипов.СодержитТип(ОграничениеТипов) И ОграничениеТипов <> Тип("Неопределено") Тогда
Результат = ЮТОбщий.ЗначениеВМассиве(ОграничениеТипов);
ИначеЕсли ТипОграничения = Тип("ОписаниеТипов") Тогда
Результат = ЮТОбщий.ПересечениеМассивов(ОписаниеТипов.Типы(), ОграничениеТипов.Типы());
Иначе
Результат = Неопределено;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Результат) Тогда
Сообщение = СтрШаблон("Исправьте ограничение типов для реквизита `%1` (`%2`), оно не входит в множество типов реквизита (`%3`)",
ИмяРеквизита,
ОграничениеТипов,
ОписаниеТипов);
ВызватьИсключение Сообщение;
КонецЕсли;
Возврат Новый ОписаниеТипов(Результат,
ОписаниеТипов.КвалификаторыЧисла,
ОписаниеТипов.КвалификаторыСтроки,
ОписаниеТипов.КвалификаторыДаты,
ОписаниеТипов.КвалификаторыДвоичныхДанных);
КонецФункции
#КонецОбласти

View File

@ -59,13 +59,15 @@
// ИмяРеквизита - Строка - Имя реквизита объекта или табличной части
// РеквизитыЗаполнения - Структура - Значения реквизитов заполнения создаваемого объекта базы
// - Неопределено
// ОграничениеТипа - Тип, ОписаниеТипов - Испольуется для ограничения типа составного реквизита, будет сгерерировано значение указанного типа
// - Неопределено - Будет сгенерировано значение, на основании типа реквизита, если реквизит составной, то будет использован случайный тип
//
// Возвращаемое значение:
// ОбщийМодуль - Конструктор
&НаКлиенте
Функция Фикция(ИмяРеквизита, РеквизитыЗаполнения = Неопределено) Экспорт
Функция Фикция(ИмяРеквизита, РеквизитыЗаполнения = Неопределено, ОграничениеТипа = Неопределено) Экспорт
ЮТКонструкторТестовыхДанныхСлужебный.Фикция(Контекст, ИмяРеквизита, РеквизитыЗаполнения);
ЮТКонструкторТестовыхДанныхСлужебный.Фикция(Контекст, ИмяРеквизита, РеквизитыЗаполнения, ОграничениеТипа);
Возврат ЭтотОбъект;
КонецФункции

View File

@ -58,12 +58,14 @@
// ИмяРеквизита - Строка - Имя реквизита объекта или табличной части
// РеквизитыЗаполнения - Структура - Значения реквизитов заполнения создаваемого объекта базы
// - Неопределено
// ОграничениеТипа - Тип, ОписаниеТипов - Испольуется для ограничения типа составного реквизита, будет сгерерировано значение указанного типа
// - Неопределено - Будет сгенерировано значение, на основании типа реквизита, если реквизит составной, то будет использован случайный тип
//
// Возвращаемое значение:
// ОбщийМодуль - Конструктор
Функция Фикция(ИмяРеквизита, РеквизитыЗаполнения = Неопределено) Экспорт
Функция Фикция(ИмяРеквизита, РеквизитыЗаполнения = Неопределено, ОграничениеТипа = Неопределено) Экспорт
ЮТКонструкторТестовыхДанныхСлужебный.Фикция(Контекст, ИмяРеквизита, РеквизитыЗаполнения);
ЮТКонструкторТестовыхДанныхСлужебный.Фикция(Контекст, ИмяРеквизита, РеквизитыЗаполнения, ОграничениеТипа);
Возврат ЭтотОбъект;
КонецФункции

View File

@ -24,6 +24,7 @@
.ДобавитьТест("ЗаполнитьСправочник")
.ДобавитьТест("ЗаполнитьДокумент")
.ДобавитьТест("Фикция")
.ДобавитьТест("Фикция_Типизированная")
.ДобавитьТест("ФикцияОбязательныхПолей")
.ДобавитьТест("СоздатьГруппу")
;
@ -145,6 +146,48 @@
КонецПроцедуры
Процедура Фикция_Типизированная() Экспорт
ИмяТипа = "ПланОбменаСсылка.Мобильные";
Тип = Тип(ИмяТипа);
Варианты = ЮТест.Варианты("Тип, ОжилаемыйТип, Описание")
.Добавить(ИмяТипа, Тип, "По представлению типа")
.Добавить(Тип, Тип, "По типу")
.Добавить(Новый ОписаниеТипов(ИмяТипа), Тип, "По описаниею типов")
.Добавить("Строка", Тип("Строка"), "Другой тип")
;
Для Каждого Вариант Из Варианты.СписокВариантов() Цикл
Данные = ЮТест.Данные().КонструкторОбъекта("Справочник.МобильныеУстройства")
.Фикция("Подписчик", , Вариант.Тип)
.ДанныеОбъекта();
ЮТест.ОжидаетЧто(Данные, Вариант.Описание).Свойство("Подписчик")
.Заполнено()
.ИмеетТип(Вариант.ОжилаемыйТип);
КонецЦикла;
//
Варианты = ЮТест.Варианты("Тип, Описание")
.Добавить("Дата", "Неподходящий тип")
.Добавить(Новый ОписаниеТипов("Число, Дата"), "Неподходящее описание типов")
.Добавить("Неопределено", "Неопределено")
.Добавить(Тип("Неопределено"), "Тип Неопределено")
;
Конструктор = ЮТест.Данные().КонструкторОбъекта("Справочник.МобильныеУстройства");
Для Каждого Вариант Из Варианты.СписокВариантов() Цикл
ЮТест.ОжидаетЧто(Конструктор, Вариант.Описание).Метод("Фикция", ЮТОбщий.ЗначениеВМассиве("Подписчик", Неопределено, Вариант.Тип))
.ВыбрасываетИсключение("Исправьте ограничение типов для реквизита `Подписчик`");
КонецЦикла;
КонецПроцедуры
Процедура ФикцияОбязательныхПолей() Экспорт
Данные = ЮТест.Данные().КонструкторОбъекта("Справочники.Контрагенты")