1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2025-01-20 18:48:36 +02:00

Merge pull request #311 from alexandr-yang/issues/310

#310 Метод УстановитьСсылкуНового в конструкторе объекта
This commit is contained in:
Koryakin Aleksey 2024-03-31 15:17:49 +03:00 committed by GitHub
commit ec4cd376fb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 136 additions and 4 deletions

View File

@ -100,10 +100,25 @@
КонецПроцедуры
Процедура УстановитьСсылкуНового(Контекст, Значение) Экспорт
Если ТипЗнч(Значение) = Тип("УникальныйИдентификатор") Тогда
УникальныйИдентификаторСсылки = Значение;
ИначеЕсли ЮТСтроки.ЭтоУникальныйИдентификаторСтрокой(Значение) Тогда
УникальныйИдентификаторСсылки = Новый УникальныйИдентификатор(Значение);
Иначе
ВызватьИсключение "Неправильный тип значения для ссылки нового";
КонецЕсли;
Контекст.УникальныйИдентификаторСсылки = УникальныйИдентификаторСсылки;
КонецПроцедуры
Функция Записать(Контекст, ВернутьОбъект = Ложь, ОбменДаннымиЗагрузка = Ложь) Экспорт
ПараметрыЗаписи = ЮТОбщий.ПараметрыЗаписи();
ПараметрыЗаписи.ДополнительныеСвойства = Контекст.ДополнительныеСвойства;
ПараметрыЗаписи.УникальныйИдентификаторСсылки = Контекст.УникальныйИдентификаторСсылки;
ПараметрыЗаписи.ОбменДаннымиЗагрузка = ОбменДаннымиЗагрузка;
Ссылка = ЮТТестовыеДанныеСлужебныйВызовСервера.СоздатьЗапись(Контекст.Менеджер, Контекст.Данные, ПараметрыЗаписи, ВернутьОбъект);
@ -116,7 +131,12 @@
Функция НовыйОбъект(Контекст) Экспорт
Возврат ЮТТестовыеДанныеСлужебныйВызовСервера.НовыйОбъект(Контекст.Менеджер, Контекст.Данные, Контекст.ДополнительныеСвойства);
Возврат ЮТТестовыеДанныеСлужебныйВызовСервера.НовыйОбъект(
Контекст.Менеджер,
Контекст.Данные,
Контекст.ДополнительныеСвойства,
Контекст.УникальныйИдентификаторСсылки
);
КонецФункции
@ -124,6 +144,7 @@
ПараметрыЗаписи = ЮТОбщий.ПараметрыЗаписи();
ПараметрыЗаписи.ДополнительныеСвойства = Контекст.ДополнительныеСвойства;
ПараметрыЗаписи.УникальныйИдентификаторСсылки = Контекст.УникальныйИдентификаторСсылки;
ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение;
Ссылка = ЮТТестовыеДанныеСлужебныйВызовСервера.СоздатьЗапись(Контекст.Менеджер, Контекст.Данные, ПараметрыЗаписи, ВернутьОбъект);
@ -195,14 +216,17 @@
// * Метаданные - см. ЮТМетаданные.СтруктураОписанияОбъектаМетаданных
// * ТекущаяТабличнаяЧасть - Строка
// * ДополнительныеСвойства - Структура
// * УникальныйИдентификаторСсылки - УникальныйИдентификатор
// - Неопределено
Функция НовыйКонтекстКонструктора(Менеджер) Экспорт
Контекст = Новый Структура("Менеджер, Данные, Метаданные", Менеджер, Новый Структура());
Контекст = Новый Структура();
Контекст.Вставить("Менеджер", Менеджер);
Контекст.Вставить("Данные", Новый Структура());
Контекст.Вставить("Метаданные", ЮТМетаданные.ОписаниеОбъектаМетаданных(Менеджер));
Контекст.Вставить("ТекущаяТабличнаяЧасть", "");
Контекст.Вставить("ДополнительныеСвойства", Новый Структура());
Контекст.Вставить("УникальныйИдентификаторСсылки", Неопределено);
//@skip-check constructor-function-return-section
Возврат Контекст;

View File

@ -265,11 +265,14 @@
// * ДополнительныеСвойства - Структура
// * РежимЗаписи - РежимЗаписиДокумента
// - Неопределено
// * УникальныйИдентификаторСсылки - УникальныйИдентификатор
// - Неопределено
Функция ПараметрыЗаписи() Экспорт
ПараметрыЗаписи = Новый Структура();
ПараметрыЗаписи.Вставить("ОбменДаннымиЗагрузка", Ложь);
ПараметрыЗаписи.Вставить("ДополнительныеСвойства", Новый Структура);
ПараметрыЗаписи.Вставить("УникальныйИдентификаторСсылки", Неопределено);
ПараметрыЗаписи.Вставить("РежимЗаписи", Неопределено);
Возврат ПараметрыЗаписи;

View File

@ -167,6 +167,42 @@
КонецФункции
// Проверяет, что переданое значение является строковым представлением уникального идентификатора
//
// Параметры:
// Значение - Строка
//
// Возвращаемое значение:
// Булево
Функция ЭтоУникальныйИдентификаторСтрокой(Значение) Экспорт
Если ТипЗнч(Значение) <> Тип("Строка") Тогда
Возврат Ложь;
КонецЕсли;
Шаблон = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX";
Если СтрДлина(Шаблон) <> СтрДлина(Значение) Тогда
Возврат Ложь;
КонецЕсли;
Для Позиция = 1 По СтрДлина(Значение) Цикл
КодСимволаШаблона = КодСимвола(Шаблон, Позиция);
КодСимволаЗначения = КодСимвола(Значение, Позиция);
Если КодСимволаШаблона = 88 // X
И ((КодСимволаЗначения < 48 ИЛИ КодСимволаЗначения > 57) // 0..9
И (КодСимволаЗначения < 97 ИЛИ КодСимволаЗначения > 102) // a..f
И (КодСимволаЗначения < 65 ИЛИ КодСимволаЗначения > 70)) // A..F
ИЛИ КодСимволаШаблона = 45 И КодСимволаЗначения <> 45 Тогда // -
Возврат Ложь;
КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции

View File

@ -22,7 +22,8 @@
ПараметрыЗаписи = ПараметрыЗаписи(ПараметрыЗаписи);
Объект = НовыйОбъект(Менеджер, Данные, ПараметрыЗаписи.ДополнительныеСвойства);
Объект = НовыйОбъект(Менеджер, Данные,
ПараметрыЗаписи.ДополнительныеСвойства, ПараметрыЗаписи.УникальныйИдентификаторСсылки);
КлючЗаписи = ЗаписатьОбъект(Объект, ПараметрыЗаписи);
@ -40,10 +41,14 @@
// Менеджер - Произвольный
// Данные - Структура - Данные заполнения объекта
// ДополнительныеСвойства - Структура - Дополнительные свойства объекта
// УникальныйИдентификаторСсылки - УникальныйИдентификатор - Уникальный идентификатор, который будет установлен в качестве ссылки для объекта
//
// Возвращаемое значение:
// Произвольный - Созданный объект
Функция НовыйОбъект(Знач Менеджер, Знач Данные, Знач ДополнительныеСвойства = Неопределено) Экспорт
Функция НовыйОбъект(Знач Менеджер,
Знач Данные,
Знач ДополнительныеСвойства = Неопределено,
Знач УникальныйИдентификаторСсылки = Неопределено) Экспорт
ОписаниеОбъектаМетаданных = ЮТМетаданные.ОписаниеОбъектаМетаданных(Менеджер);
Менеджер = ЮТОбщий.Менеджер(ОписаниеОбъектаМетаданных);
@ -55,6 +60,11 @@
Если ДополнительныеСвойства <> Неопределено Тогда
ЮТКоллекции.ДополнитьСтруктуру(Объект.ДополнительныеСвойства, ДополнительныеСвойства);
КонецЕсли;
Если УникальныйИдентификаторСсылки <> Неопределено И ОписаниеОбъектаМетаданных.ОписаниеТипа.Ссылочный Тогда
Ссылка = Менеджер.ПолучитьСсылку(УникальныйИдентификаторСсылки);
Объект.УстановитьСсылкуНового(Ссылка);
КонецЕсли;
Если ЭтоРегистр Тогда

View File

@ -170,6 +170,22 @@
КонецФункции
// Устанавливает дополнительное свойство объекта.
//
// Параметры:
// Значение - УникальныйИдентификатор - Уникальный идентификатор ссылки нового объекта
// - Строка - Строковое представление уникального идентификатора ссылки нового объекта
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТКонструкторТестовыхДанных - Конструктор
&НаКлиенте
Функция УстановитьСсылкуНового(Значение) Экспорт
ЮТКонструкторТестовыхДанныхСлужебный.УстановитьСсылкуНового(Контекст, Значение);
Возврат ЭтотОбъект;
КонецФункции
// Создает новый объект и возвращает его или ссылку.
//
// Важно, после создания данные не очищаются, поэтому многократный вызов метода создаст множество одинаковых объектов.

View File

@ -161,6 +161,21 @@
КонецФункции
// Устанавливает дополнительное свойство объекта.
//
// Параметры:
// Значение - УникальныйИдентификатор - Уникальный идентификатор ссылки нового объекта
// - Строка - Строковое представление уникального идентификатора ссылки нового объекта
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТКонструкторТестовыхДанных - Конструктор
Функция УстановитьСсылкуНового(Значение) Экспорт
ЮТКонструкторТестовыхДанныхСлужебный.УстановитьСсылкуНового(Контекст, Значение);
Возврат ЭтотОбъект;
КонецФункции
// Создает новый объект и возвращает его или ссылку.
//
// Важно, после создания данные не очищаются, поэтому многократный вызов метода создаст множество одинаковых объектов.

View File

@ -31,6 +31,7 @@
.ДобавитьТест("ФикцияОбязательныхПолей")
.ДобавитьТест("СоздатьГруппу")
.ДобавитьТест("УстановитьРеквизиты")
.ДобавитьТест("УстановитьСсылкуНового")
;
КонецПроцедуры
@ -321,4 +322,31 @@
КонецПроцедуры
Процедура УстановитьСсылкуНового() Экспорт
Конструктор = ЮТест.Данные().КонструкторОбъекта("Справочники.Товары");
УникальныйИдентификатор = Новый УникальныйИдентификатор();
Ссылка = Конструктор.УстановитьСсылкуНового(УникальныйИдентификатор).Записать();
ЮТест.ОжидаетЧто(Ссылка.УникальныйИдентификатор(), "Уникальный идентификатор")
.Равно(УникальныйИдентификатор);
УникальныйИдентификатор = Новый УникальныйИдентификатор();
УникальныйИдентификаторСтрокой = Строка(УникальныйИдентификатор);
Ссылка = Конструктор.УстановитьСсылкуНового(УникальныйИдентификаторСтрокой).Записать();
ЮТест.ОжидаетЧто(Ссылка.УникальныйИдентификатор(), "Уникальный идентификатор строкой")
.Равно(УникальныйИдентификатор);
СлучайноеЧисло = ЮТест.Данные().СлучайноеЧисло();
СлучайноеСтрока = ЮТест.Данные().СлучайнаяСтрока();
ЮТест
.ОжидаетЧто(Конструктор, "Число")
.Метод("УстановитьСсылкуНового").Параметр(СлучайноеЧисло)
.ВыбрасываетИсключение("Неправильный тип значения для ссылки нового")
.Что(Конструктор, "Строка")
.Метод("УстановитьСсылкуНового").Параметр(СлучайноеСтрока)
.ВыбрасываетИсключение("Неправильный тип значения для ссылки нового");
КонецПроцедуры
#КонецОбласти