1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2025-02-13 19:42:02 +02:00
Исправлена ошибка использования мокируемых методов в обработчиках событий
Оптимизация работы с типами
This commit is contained in:
alkoleft 2023-12-12 02:21:17 +03:00
parent 533d51d81b
commit e19943052a
8 changed files with 142 additions and 86 deletions

View File

@ -20,7 +20,9 @@
Функция Включен() Экспорт
Возврат ЮТКонтекст.ДанныеКонтекста() <> Неопределено;
ДанныеКонтекста = ЮТКонтекст.ДанныеКонтекста();
Настройки = Неопределено;
Возврат ДанныеКонтекста <> Неопределено И ДанныеКонтекста.Свойство(КлючНастроек(), Настройки) И Настройки <> Неопределено;
КонецФункции
@ -38,7 +40,7 @@
// см. НовыеНастройки
Функция Настройки() Экспорт
Настройки = ЮТКонтекст.ЗначениеКонтекста(КлючНастроек());
Настройки = ЮТКонтекст.ЗначениеКонтекста(КлючНастроек());
Если Настройки = Неопределено Тогда
ВызватьИсключение "Что-то пошло не так, настройки Мокито не инициализированы";
@ -268,7 +270,12 @@
Если ПараметрыПерехватаОбъекта = Неопределено Тогда
Если ЮТТипыДанныхСлужебный.ЭтоТипОбъекта(ТипЗначения) Тогда
Если ЮТТипыДанныхСлужебный.ЭтоТипОбъектаОбработкиОтчета(ТипЗначения) Или ЮТТипыДанныхСлужебный.ЭтоТипНабораЗаписей(ТипЗначения) Тогда
Менеджер = ЮТОбщий.Менеджер(ТипЗначения);
ПараметрыПерехватаОбъекта = ПараметрыПерехвата[Менеджер];
ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоТипОбъекта(ТипЗначения) Тогда
ПараметрыПерехватаОбъекта = ПараметрыПерехвата[Ключ.Ссылка];
@ -279,16 +286,6 @@
КонецЕсли;
ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоТипНабораЗаписей(ТипЗначения) Тогда
Менеджер = ЮТОбщий.Менеджер(ТипЗначения);
ПараметрыПерехватаОбъекта = ПараметрыПерехвата[Менеджер];
ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоТипОбработкиОтчета(ТипЗначения) Тогда
Менеджер = ЮТОбщий.Менеджер(ТипЗначения);
ПараметрыПерехватаОбъекта = ПараметрыПерехвата[Менеджер];
КонецЕсли;
КонецЕсли;
@ -338,7 +335,7 @@
// * Объект - Произвольный - Объект
//
// Возвращаемое значение:
// Структура - Описание параметров перехвата объекта:
// Структура - Описание параметров перехвата объекта:
// * Объект - Произвольный
// * Методы - Структура -
Функция ОписаниеПараметровПерехватаОбъекта(Объект) Экспорт

View File

@ -23,14 +23,7 @@
#Если ВебКлиент Тогда
ВызватьИсключение ЮТОбщий.МетодНеДоступен("ЮТТипыДанныхСлужебный.ПредставлениеТипа");
#Иначе
//@skip-check Undefined variable
ТипXML = СериализаторXDTO.XMLТип(Тип);
Если ТипXML = Неопределено Тогда
Возврат Строка(Тип);
Иначе
Возврат ТипXML.ИмяТипа;
КонецЕсли;
Возврат ИдентификаторТипа(Тип);
#КонецЕсли
КонецФункции
@ -39,18 +32,20 @@
#Если ВебКлиент Тогда
ВызватьИсключение ЮТОбщий.МетодНеДоступен("ЮТТипыДанныхСлужебный.ПредставлениеТипа");
#ИначеЕсли Сервер Тогда
Возврат ЗначениеВСтрокуВнутр(Тип); // Не все серверные типы сериализуются через СериализаторXDTO
#Иначе
Попытка
Запись = Новый ЗаписьJSON();
Запись.УстановитьСтроку();
СериализаторXDTO.ЗаписатьJSON(Запись, Тип);
Возврат Запись.Закрыть();
Исключение
ЮТРегистрацияОшибок.ДобавитьПояснениеОшибки(СтрШаблон("Не удалось определить идентификатор типа для `%1`", Тип));
ВызватьИсключение;
КонецПопытки;
ЮТПроверкиСлужебный.ПроверитьТипПараметра(Тип, Тип("Тип"), "ЮТТипыДанныхСлужебный.ИдентификаторТипа", "Тип");
Если Тип = Тип("Дата") Тогда
ИдентификаторТипа = "date";
ИначеЕсли Тип = Тип("Число") Тогда
ИдентификаторТипа = "number";
Иначе
//@skip-check Undefined variable
ИмяТипаСПространствомИмен = СериализаторXDTO.ЗаписатьXDTO(Тип).ЛексическоеЗначение;
ИдентификаторТипа = СтрРазделить(ИмяТипаСПространствомИмен, "}")[1];
КонецЕсли;
Возврат ИдентификаторТипа;
#КонецЕсли
КонецФункции
@ -59,30 +54,8 @@
#Если ВебКлиент Тогда
ВызватьИсключение ЮТОбщий.МетодНеДоступен("ЮТТипыДанныхСлужебный.ПредставлениеТипа");
#ИначеЕсли Сервер Тогда
Если СтрНачинаетсяС(ИдентификаторТипа, "{") Тогда
Возврат ЗначениеИзСтрокиВнутр(ИдентификаторТипа);
КонецЕсли;
#КонецЕсли
Возврат ТипПоПредставлению(ИдентификаторТипа);
КонецФункции
Функция ТипПоПредставлению(ПредставлениеТипа) Экспорт
#Если ВебКлиент Тогда
ВызватьИсключение ЮТОбщий.МетодНеДоступен("ЮТТипыДанныхСлужебный.ТипПоПредставлению");
#Иначе
Чтение = Новый ЧтениеJSON();
Чтение.УстановитьСтроку(ПредставлениеТипа);
Результат = СериализаторXDTO.ПрочитатьJSON(Чтение, Тип("Тип"));
Если Результат = Неопределено Тогда
ВызватьИсключение СтрШаблон("Не удалось определить тип по представлению `%1`", ПредставлениеТипа);
КонецЕсли;
Возврат Результат;
Возврат Тип(ИдентификаторТипа);
#КонецЕсли
КонецФункции
@ -93,48 +66,38 @@
КонецФункции
Функция ЭтоМенеджерЗаписи(Тип) Экспорт
Функция ЭтоМенеджерЗаписи(ТипЗначения) Экспорт
ПредставлениеТипа = ПредставлениеТипа(Тип);
СтрокаПоиска = ?(ЮТЛокальСлужебный.ЭтоАнглийскаяЛокальПлатформы(), "Record manager:", "менеджер записи:");
Возврат СтрНайти(ПредставлениеТипа, СтрокаПоиска);
ПредставлениеТипа = ПредставлениеТипа(ТипЗначения);
Возврат СтрНайти(ПредставлениеТипа, "RecordManager.") > 0;
КонецФункции
Функция ЭтоТипОбъекта(ТипЗначения) Экспорт
ПредставлениеТипа = ПредставлениеТипа(ТипЗначения);
Возврат СтрНайти(ПредставлениеТипа, "Object.");
Возврат СтрНайти(ПредставлениеТипа, "Object.") > 0;
КонецФункции
Функция ЭтоТипНабораЗаписей(ТипЗначения) Экспорт
ПредставлениеТипа = ПредставлениеТипа(ТипЗначения);
Возврат СтрНайти(ПредставлениеТипа, "RecordSet.");
Возврат СтрНайти(ПредставлениеТипа, "RecordSet.") > 0;
КонецФункции
Функция ЭтоТипОбработкиОтчета(ТипЗначения) Экспорт
Функция ЭтоТипОбъектаОбработкиОтчета(ТипЗначения) Экспорт
ПредставлениеТипа = ПредставлениеТипа(ТипЗначения);
СтрокаОбработка = ?(ЮТЛокальСлужебный.ЭтоАнглийскаяЛокальПлатформы(), "Record manager:", "Обработка объект:");
СтрокаОтчет = ?(ЮТЛокальСлужебный.ЭтоАнглийскаяЛокальПлатформы(), "Record manager:", "Отчет объект:");
Возврат СтрНайти(ПредставлениеТипа, СтрокаОбработка) > 0 ИЛИ СтрНайти(ПредставлениеТипа, СтрокаОтчет) > 0;
Возврат СтрНачинаетсяС(ПредставлениеТипа, "DataProcessorObject") Или СтрНачинаетсяС(ПредставлениеТипа, "ReportObject");
КонецФункции
Функция ЭтоТипМенеджера(ТипЗначения) Экспорт
// TODO придумать другой способ определения типа
ПредставлениеТипа = ПредставлениеТипа(ТипЗначения);
СтрокаПоиска = ?(ЮТЛокальСлужебный.ЭтоАнглийскаяЛокальПлатформы(), " manager:", " менеджер:");
Возврат СтрНайти(ПредставлениеТипа, СтрокаПоиска) > 0;
Возврат СтрНайти(ПредставлениеТипа, "Manager.") > 0;
КонецФункции

View File

@ -43,6 +43,11 @@
КонецЕсли;
Владелец = Справочники.Пользователи.НайтиПоКоду(Пользователь.Имя);
Если Владелец.Пустая() Тогда
Владелец = Справочники.Пользователи.ПустойПользователь;
КонецЕсли;
Объект.Владелец = Владелец;
КонецПроцедуры

View File

@ -23,7 +23,7 @@
<name>PredefinedDataName</name>
<comment></comment>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<fullTextSearch>DontUse</fullTextSearch>
<mask></mask>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
@ -33,7 +33,7 @@
<name>Predefined</name>
<comment></comment>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<fullTextSearch>DontUse</fullTextSearch>
<mask></mask>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
@ -43,7 +43,7 @@
<name>Ref</name>
<comment></comment>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<fullTextSearch>DontUse</fullTextSearch>
<mask></mask>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
@ -53,7 +53,7 @@
<name>DeletionMark</name>
<comment></comment>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<fullTextSearch>DontUse</fullTextSearch>
<mask></mask>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
@ -63,7 +63,7 @@
<name>IsFolder</name>
<comment></comment>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<fullTextSearch>DontUse</fullTextSearch>
<mask></mask>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
@ -75,7 +75,7 @@
<fillFromFillingValue>true</fillFromFillingValue>
<fillValue xsi:type="core:UndefinedValue"/>
<fillChecking>ShowError</fillChecking>
<fullTextSearch>Use</fullTextSearch>
<fullTextSearch>DontUse</fullTextSearch>
<mask></mask>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
@ -86,7 +86,7 @@
<comment></comment>
<fillFromFillingValue>true</fillFromFillingValue>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<fullTextSearch>DontUse</fullTextSearch>
<mask></mask>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
@ -101,7 +101,7 @@
<comment></comment>
<fillValue xsi:type="core:UndefinedValue"/>
<fillChecking>ShowError</fillChecking>
<fullTextSearch>Use</fullTextSearch>
<fullTextSearch>DontUse</fullTextSearch>
<mask></mask>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
@ -111,14 +111,14 @@
<name>Code</name>
<comment></comment>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<fullTextSearch>DontUse</fullTextSearch>
<mask></mask>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<createOnInput>Use</createOnInput>
<dataLockControlMode>Managed</dataLockControlMode>
<fullTextSearch>Use</fullTextSearch>
<fullTextSearch>DontUse</fullTextSearch>
<dataHistory>Use</dataHistory>
<levelCount>2</levelCount>
<foldersOnTop>true</foldersOnTop>
@ -129,6 +129,15 @@
<checkUnique>true</checkUnique>
<autonumbering>true</autonumbering>
<defaultPresentation>AsDescription</defaultPresentation>
<predefined>
<items id="bf9313f1-f2b0-4fb4-a97a-aabef9e25a2e">
<name>ПустойПользователь</name>
<description>Пустой пользователь</description>
<code xsi:type="core:StringValue">
<value>0000000000000000000000001</value>
</code>
</items>
</predefined>
<editType>InDialog</editType>
<choiceMode>BothWays</choiceMode>
<defaultObjectForm>Catalog.Пользователи.Form.ФормаЭлемента</defaultObjectForm>

View File

@ -22,6 +22,7 @@
ЮТТесты
.ДобавитьТест("ВыброситьИсключение")
.ДобавитьСерверныйТест("ФормированиеТипыПерехватываемыхОбъектов")
;
КонецПроцедуры
@ -45,4 +46,39 @@
КонецПроцедуры
#Если Сервер Тогда
Процедура ФормированиеТипыПерехватываемыхОбъектов() Экспорт
Мокито.Обучение(Обработки.АдминистративныйСервис);
ЮТест.ОжидаетЧто(МокитоСлужебный.Настройки(), "Обработка менеджер") // Проверка сформированных настроек
.Свойство("Перехват").ИмеетСвойство(Обработки.АдминистративныйСервис)
.Свойство("ТипыПерехватываемыхОбъектов")
.ИмеетДлину(2)
.ИмеетСвойство(Тип("ОбработкаМенеджер.АдминистративныйСервис"))
.ИмеетСвойство(Тип("ОбработкаОбъект.АдминистративныйСервис"));
Мокито.Сбросить();
Мокито.Обучение(Справочники.Банки.ПустаяСсылка());
ЮТест.ОжидаетЧто(МокитоСлужебный.Настройки(), "Ссылка") // Проверка сформированных настроек
.Свойство("Перехват").ИмеетСвойство(Справочники.Банки.ПустаяСсылка())
.Свойство("ТипыПерехватываемыхОбъектов")
.ИмеетДлину(2)
.ИмеетСвойство(Тип("СправочникСсылка.Банки"))
.ИмеетСвойство(Тип("СправочникОбъект.Банки"));
Мокито.Сбросить();
Мокито.Обучение(РегистрыНакопления.Взаиморасчеты);
ЮТест.ОжидаетЧто(МокитоСлужебный.Настройки(), "Регистр") // Проверка сформированных настроек
.Свойство("Перехват").ИмеетСвойство(РегистрыНакопления.Взаиморасчеты)
.Свойство("ТипыПерехватываемыхОбъектов")
.ИмеетДлину(2)
.ИмеетСвойство(Тип("РегистрНакопленияНаборЗаписей.Взаиморасчеты"))
.ИмеетСвойство(Тип("РегистрНакопленияМенеджер.Взаиморасчеты"));
КонецПроцедуры
#КонецЕсли
#КонецОбласти

View File

@ -23,6 +23,7 @@
ЮТТесты.ВТранзакции().УдалениеТестовыхДанных()
.ДобавитьТест("ЗаполнитьСправочник")
.ДобавитьТест("ЗаполнитьДокумент")
.ДобавитьТест("СоздатьЗаписьРегистраСведений")
.ДобавитьТест("Фикция")
.ДобавитьТест("Фикция_Типизированная")
.ДобавитьТест("ФикцияОбязательныхПолей")
@ -122,6 +123,20 @@
КонецПроцедуры
Процедура СоздатьЗаписьРегистраСведений() Экспорт
Результат = ЮТест.Данные().КонструкторОбъекта("РегистрыСведений.КурсыВалют")
.Фикция("Валюта")
.Фикция("Курс")
.Установить("Период", ТекущаяДата())
.Записать();
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип(Тип("РегистрСведенийКлючЗаписи.КурсыВалют"))
.Заполнено();
КонецПроцедуры
Процедура Фикция() Экспорт
Поставщик = Ютест.Данные().СоздатьЭлемент("Справочники.Контрагенты");

View File

@ -39,7 +39,25 @@
.ДобавитьТест("ЭтоКоллекцияПримитивныхТипов")
.СПараметрами(ЮТОбщий.ЗначениеВМассиве(Тип("Строка"), Тип("Дата")), Истина)
.СПараметрами(ЮТОбщий.ЗначениеВМассиве(Тип("Строка"), Тип("Дата"), Тип("ПеречислениеСсылка.PushУведомления")), Ложь)
.ДобавитьТест("ИдентификаторТипа")
.СПараметрами("Дата")
.СПараметрами("Строка")
.СПараметрами("Число")
.СПараметрами("Булево")
.СПараметрами("Неопределено")
.СПараметрами("Null")
.СПараметрами("УникальныйИдентификатор")
.СПараметрами("ВидДвиженияБухгалтерии")
.СПараметрами("HTTPЗапрос")
.СПараметрами("ТабличныйДокумент")
.СПараметрами("ХранилищеЗначения")
.СПараметрами("ПеречислениеСсылка.PushУведомления")
.ДобавитьСерверныйТест("ИдентификаторТипа")
.СПараметрами("СправочникМенеджер.Банки")
.СПараметрами("СхемаКомпоновкиДанных")
.СПараметрами("HTTPСервисЗапрос")
.СПараметрами("ОбъектXDTO")
.СПараметрами("ОбъектМетаданных")
;
КонецПроцедуры
@ -48,7 +66,6 @@
ЮТест.ОжидаетЧто(ЮТТипыДанныхСлужебный.ЭтоСистемноеПеречисление(Тип))
.Равно(ОжидаемыйРезультат);
КонецПроцедуры
Процедура ТипыСистемныхПеречислений() Экспорт
@ -82,6 +99,18 @@
КонецПроцедуры
Процедура ИдентификаторТипа(ИмяТипа) Экспорт
Тип = Тип(ИмяТипа);
Результат = ЮТТипыДанныхСлужебный.ИдентификаторТипа(Тип(ИмяТипа));
ЮТест.ОжидаетЧто(Результат)
.Заполнено();
ЮТест.ОжидаетЧто(Тип(Результат))
.Равно(Тип);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции

View File

@ -5,5 +5,7 @@
<key>ru</key>
<value>Типы данных служебный</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
<server>true</server>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>