Cover full 1C metadata object catalog
This commit is contained in:
@@ -506,6 +506,13 @@ _OBJECT_KIND_BY_TAG = {
|
||||
"subsystem": "SUBSYSTEM",
|
||||
"subsystems": "SUBSYSTEM",
|
||||
"подсистема": "SUBSYSTEM",
|
||||
"sequence": "SEQUENCE",
|
||||
"sequences": "SEQUENCE",
|
||||
"последовательность": "SEQUENCE",
|
||||
"documentnumerator": "DOCUMENT_NUMERATOR",
|
||||
"documentnumerators": "DOCUMENT_NUMERATOR",
|
||||
"нумератордокументов": "DOCUMENT_NUMERATOR",
|
||||
"нумератор": "DOCUMENT_NUMERATOR",
|
||||
"httpservice": "HTTP_SERVICE",
|
||||
"httpservices": "HTTP_SERVICE",
|
||||
"httpсервис": "HTTP_SERVICE",
|
||||
@@ -722,6 +729,15 @@ _FORM_ELEMENT_TAGS = {
|
||||
_QUALIFIED_PREFIX_BY_KIND = {
|
||||
"CATALOG": "Справочник",
|
||||
"DOCUMENT": "Документ",
|
||||
"CONSTANT": "Константа",
|
||||
"DOCUMENT_JOURNAL": "ЖурналДокументов",
|
||||
"ENUM": "Перечисление",
|
||||
"REPORT": "Отчет",
|
||||
"DATA_PROCESSOR": "Обработка",
|
||||
"CHART_OF_CHARACTERISTIC_TYPES": "ПланВидовХарактеристик",
|
||||
"CHART_OF_ACCOUNTS": "ПланСчетов",
|
||||
"CHART_OF_CALCULATION_TYPES": "ПланВидовРасчета",
|
||||
"EXTERNAL_DATA_SOURCE": "ВнешнийИсточникДанных",
|
||||
"REGISTER": "Регистр",
|
||||
"INFORMATION_REGISTER": "РегистрСведений",
|
||||
"ACCUMULATION_REGISTER": "РегистрНакопления",
|
||||
@@ -734,6 +750,8 @@ _QUALIFIED_PREFIX_BY_KIND = {
|
||||
"BUSINESS_PROCESS": "БизнесПроцесс",
|
||||
"TASK": "Задача",
|
||||
"SUBSYSTEM": "Подсистема",
|
||||
"SEQUENCE": "Последовательность",
|
||||
"DOCUMENT_NUMERATOR": "НумераторДокументов",
|
||||
"HTTP_SERVICE": "HTTPСервис",
|
||||
"WEB_SERVICE": "WebСервис",
|
||||
"WS_REFERENCE": "WSСсылка",
|
||||
@@ -803,6 +821,8 @@ _QUALIFIED_PREFIX_BY_TAG = {
|
||||
"bot": "Бот",
|
||||
"interface": "Интерфейс",
|
||||
"fulltextsearchdictionary": "СловарьПолнотекстовогоПоиска",
|
||||
"sequence": "Последовательность",
|
||||
"documentnumerator": "НумераторДокументов",
|
||||
}
|
||||
|
||||
_ROOT_METADATA_OBJECT_KINDS = {
|
||||
@@ -830,6 +850,8 @@ _ROOT_METADATA_OBJECT_KINDS = {
|
||||
"BUSINESS_PROCESS",
|
||||
"TASK",
|
||||
"SUBSYSTEM",
|
||||
"SEQUENCE",
|
||||
"DOCUMENT_NUMERATOR",
|
||||
"HTTP_SERVICE",
|
||||
"WEB_SERVICE",
|
||||
"WS_REFERENCE",
|
||||
@@ -851,6 +873,7 @@ _ROOT_METADATA_OBJECT_KINDS = {
|
||||
"COMMON_LAYOUT",
|
||||
"COMMON_PICTURE",
|
||||
"INTEGRATION_SERVICE",
|
||||
"EXTENSION",
|
||||
"PALETTE_COLOR",
|
||||
"STYLE_ITEM",
|
||||
"STYLE",
|
||||
@@ -861,8 +884,11 @@ _ROOT_METADATA_OBJECT_KINDS = {
|
||||
_GROUP_BY_OBJECT_KIND = {
|
||||
"PROJECT": "Конфигурация",
|
||||
"COMMON_MODULE": "Общие модули",
|
||||
"CONSTANT": "Константы",
|
||||
"CATALOG": "Справочники",
|
||||
"DOCUMENT": "Документы",
|
||||
"DOCUMENT_JOURNAL": "Журналы документов",
|
||||
"ENUM": "Перечисления",
|
||||
"REGISTER": "Регистры",
|
||||
"INFORMATION_REGISTER": "Регистры сведений",
|
||||
"ACCUMULATION_REGISTER": "Регистры накопления",
|
||||
@@ -870,10 +896,18 @@ _GROUP_BY_OBJECT_KIND = {
|
||||
"CALCULATION_REGISTER": "Регистры расчета",
|
||||
"REPORT": "Отчеты",
|
||||
"DATA_PROCESSOR": "Обработки",
|
||||
"CHART_OF_CHARACTERISTIC_TYPES": "Планы видов характеристик",
|
||||
"CHART_OF_ACCOUNTS": "Планы счетов",
|
||||
"CHART_OF_CALCULATION_TYPES": "Планы видов расчета",
|
||||
"BUSINESS_PROCESS": "Бизнес-процессы",
|
||||
"TASK": "Задачи",
|
||||
"EXTENSION": "Расширения конфигурации",
|
||||
"FORM": "Формы",
|
||||
"COMMAND": "Команды",
|
||||
"ROLE": "Роли",
|
||||
"SUBSYSTEM": "Подсистемы",
|
||||
"SEQUENCE": "Последовательности",
|
||||
"DOCUMENT_NUMERATOR": "Нумераторы документов",
|
||||
"HTTP_SERVICE": "HTTP-сервисы",
|
||||
"WEB_SERVICE": "Web-сервисы",
|
||||
"WS_REFERENCE": "WS-ссылки",
|
||||
|
||||
@@ -34,6 +34,8 @@ COMMON_BRANCH_CHILDREN = (
|
||||
"Подписки на события",
|
||||
"Критерии отбора",
|
||||
"Регламентные задания",
|
||||
"Последовательности",
|
||||
"Нумераторы документов",
|
||||
"Функциональные опции",
|
||||
"Параметры функциональных опций",
|
||||
"Определяемые типы",
|
||||
@@ -145,6 +147,7 @@ REPORT_CHILDREN = (
|
||||
|
||||
METADATA_TYPE_SPECS: tuple[MetadataTypeSpec, ...] = (
|
||||
MetadataTypeSpec("COMMON", "Общие", "Общие", "common", COMMON_BRANCH_CHILDREN),
|
||||
MetadataTypeSpec("SUBSYSTEM", "Подсистема", "Подсистемы", "subsystem", ("Состав", "Командный интерфейс", "Права")),
|
||||
MetadataTypeSpec(
|
||||
"COMMON_MODULE",
|
||||
"Общий модуль",
|
||||
@@ -186,8 +189,11 @@ METADATA_TYPE_SPECS: tuple[MetadataTypeSpec, ...] = (
|
||||
MetadataTypeSpec("EXTERNAL_DATA_SOURCE", "Внешний источник данных", "Внешние источники данных", "external-source", ("Таблицы", "Кубы", "Функции", "Формы", "Команды", "Макеты")),
|
||||
MetadataTypeSpec("EXCHANGE_PLAN", "План обмена", "Планы обмена", "exchange-plan", STRUCTURED_OBJECT_CHILDREN + ("Состав",), OBJECT_MODULES),
|
||||
MetadataTypeSpec("EVENT_SUBSCRIPTION", "Подписка на событие", "Подписки на события", "event", ("События",), HANDLER_METHOD),
|
||||
MetadataTypeSpec("ROLE", "Роль", "Роли", "role", ("Права", "Ограничения доступа", "Объекты доступа")),
|
||||
MetadataTypeSpec("EXTENSION", "Расширение конфигурации", "Расширения конфигурации", "extension", ("Объекты расширения", "Заимствованные объекты", "Добавленные реквизиты", "Формы", "Команды", "Проверки совместимости")),
|
||||
MetadataTypeSpec("SCHEDULED_JOB", "Регламентное задание", "Регламентные задания", "scheduled-job", ("Расписание", "Параметры"), ("Метод",)),
|
||||
MetadataTypeSpec("SEQUENCE", "Последовательность", "Последовательности", "sequence", ("Измерения", "Документы", "Границы")),
|
||||
MetadataTypeSpec("DOCUMENT_NUMERATOR", "Нумератор документов", "Нумераторы документов", "numbering", ("Документы", "Периодичность", "Длина номера")),
|
||||
MetadataTypeSpec("SESSION_PARAMETER", "Параметр сеанса", "Параметры сеанса", "parameter"),
|
||||
MetadataTypeSpec("COMMON_ATTRIBUTE", "Общий реквизит", "Общие реквизиты", "attribute"),
|
||||
MetadataTypeSpec("FILTER_CRITERION", "Критерий отбора", "Критерии отбора", "filter"),
|
||||
@@ -217,6 +223,7 @@ METADATA_TYPE_SPECS: tuple[MetadataTypeSpec, ...] = (
|
||||
|
||||
METADATA_TYPE_DESCRIPTIONS = {
|
||||
"COMMON": "Служебная ветка дерева конфигурации, объединяющая общие объекты метаданных.",
|
||||
"SUBSYSTEM": "Подсистема группирует прикладные объекты и участвует в построении командного интерфейса.",
|
||||
"COMMON_MODULE": "Общий модуль содержит процедуры и функции, доступные из разных областей выполнения конфигурации.",
|
||||
"CONSTANT": "Константа хранит единичное значение конфигурации и может иметь формы, команды, права и модуль менеджера.",
|
||||
"CATALOG": "Справочник описывает прикладной список объектов с реквизитами, табличными частями, формами, командами, макетами, правами и предопределенными данными.",
|
||||
@@ -237,8 +244,11 @@ METADATA_TYPE_DESCRIPTIONS = {
|
||||
"EXTERNAL_DATA_SOURCE": "Внешний источник данных описывает подключение к внешним таблицам, кубам и функциям.",
|
||||
"EXCHANGE_PLAN": "План обмена описывает узлы и состав данных для распределенного обмена.",
|
||||
"EVENT_SUBSCRIPTION": "Подписка на событие связывает событие платформы или объекта с обработчиком.",
|
||||
"ROLE": "Роль описывает набор прав доступа к объектам конфигурации и их данным.",
|
||||
"EXTENSION": "Расширение конфигурации содержит добавленные и заимствованные объекты, а также проверки совместимости.",
|
||||
"SCHEDULED_JOB": "Регламентное задание описывает метод, параметры и расписание фонового выполнения.",
|
||||
"SEQUENCE": "Последовательность управляет сквозной последовательностью проведения документов и границами восстановления.",
|
||||
"DOCUMENT_NUMERATOR": "Нумератор документов задает общие правила нумерации для одного или нескольких видов документов.",
|
||||
"SESSION_PARAMETER": "Параметр сеанса задает значение, доступное в течение пользовательского сеанса.",
|
||||
"COMMON_ATTRIBUTE": "Общий реквизит добавляет реквизит сразу к выбранному набору объектов конфигурации.",
|
||||
"FILTER_CRITERION": "Критерий отбора задает состав реквизитов для универсального отбора ссылочных данных.",
|
||||
@@ -282,6 +292,7 @@ METADATA_TYPE_DOCUMENTATION_URLS.update(
|
||||
|
||||
METADATA_TYPE_PROPERTIES: dict[str, tuple[str, ...]] = {
|
||||
"COMMON": ("Состав общих объектов",),
|
||||
"SUBSYSTEM": STANDARD_PROPERTIES + ("Состав", "Включать в командный интерфейс", "Картинка", "Родитель"),
|
||||
"COMMON_MODULE": STANDARD_PROPERTIES + ("Клиент", "Сервер", "Внешнее соединение", "Глобальный", "Вызов сервера", "Повторное использование возвращаемых значений"),
|
||||
"CONSTANT": STANDARD_PROPERTIES + ("Тип значения", "Основная форма", "Форма выбора"),
|
||||
"CATALOG": REFERENCE_OBJECT_PROPERTIES,
|
||||
@@ -302,8 +313,11 @@ METADATA_TYPE_PROPERTIES: dict[str, tuple[str, ...]] = {
|
||||
"EXTERNAL_DATA_SOURCE": STANDARD_PROPERTIES + ("Соединение", "Таблицы", "Кубы", "Функции"),
|
||||
"EXCHANGE_PLAN": DATA_OBJECT_PROPERTIES + ("Состав обмена", "Распределенная ИБ", "Авторегистрация изменений"),
|
||||
"EVENT_SUBSCRIPTION": STANDARD_PROPERTIES + ("Источник", "Событие", "Обработчик", "Перед/после события"),
|
||||
"ROLE": STANDARD_PROPERTIES + ("Права", "RLS", "Ограничения доступа"),
|
||||
"EXTENSION": ("Имя", "Назначение", "Версия", "Режим совместимости", "Заимствованные объекты", "Проверки совместимости"),
|
||||
"SCHEDULED_JOB": STANDARD_PROPERTIES + ("Метод", "Расписание", "Использование", "Параметры", "Предопределенное"),
|
||||
"SEQUENCE": STANDARD_PROPERTIES + ("Документы", "Измерения", "Периодичность", "Заполнение", "Граница"),
|
||||
"DOCUMENT_NUMERATOR": STANDARD_PROPERTIES + ("Длина номера", "Тип номера", "Периодичность", "Документы"),
|
||||
"SESSION_PARAMETER": STANDARD_PROPERTIES + ("Тип значения",),
|
||||
"COMMON_ATTRIBUTE": STANDARD_PROPERTIES + ("Тип значения", "Состав", "Разделение данных", "Автоиспользование"),
|
||||
"FILTER_CRITERION": STANDARD_PROPERTIES + ("Тип значения", "Состав реквизитов"),
|
||||
|
||||
@@ -219,6 +219,43 @@ def test_normalize_edt_project_preserves_source_path_and_common_object_descripti
|
||||
assert common_forms[0].metadata["comment"] == "Используется в подборе товаров"
|
||||
|
||||
|
||||
def test_normalize_edt_project_knows_full_common_metadata_catalog(tmp_path: Path):
|
||||
for file_name, class_name, object_name in [
|
||||
("Продажи.mdo", "Subsystem", "Продажи"),
|
||||
("Менеджер.mdo", "Role", "Менеджер"),
|
||||
("ПроведениеДокументов.mdo", "Sequence", "ПроведениеДокументов"),
|
||||
("ОбщийНумератор.mdo", "DocumentNumerator", "ОбщийНумератор"),
|
||||
("ДоступностьСкидок.mdo", "FunctionalOption", "ДоступностьСкидок"),
|
||||
("ФормаПодбора.mdo", "CommonForm", "ФормаПодбора"),
|
||||
("ПубличныйAPI.mdo", "HTTPService", "ПубличныйAPI"),
|
||||
]:
|
||||
(tmp_path / file_name).write_text(
|
||||
f"""
|
||||
<mdclass:{class_name} xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass">
|
||||
<name>{object_name}</name>
|
||||
</mdclass:{class_name}>
|
||||
""",
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
normalized = normalize_one_c_project(tmp_path, project_id="edt-full-common")
|
||||
objects = {
|
||||
item.qualified_name
|
||||
for group in normalized.configuration.groups
|
||||
for item in group.objects
|
||||
}
|
||||
|
||||
assert {
|
||||
"Подсистема.Продажи",
|
||||
"Роль.Менеджер",
|
||||
"Последовательность.ПроведениеДокументов",
|
||||
"НумераторДокументов.ОбщийНумератор",
|
||||
"ФункциональнаяОпция.ДоступностьСкидок",
|
||||
"ОбщаяФорма.ФормаПодбора",
|
||||
"HTTPСервис.ПубличныйAPI",
|
||||
}.issubset(objects)
|
||||
|
||||
|
||||
def test_normalize_edt_project_preserves_localized_descriptions(tmp_path: Path):
|
||||
catalog = tmp_path / "Контрагенты.mdo"
|
||||
catalog.write_text(
|
||||
|
||||
@@ -78,6 +78,37 @@ _METADATA_OWNER_KINDS = {
|
||||
NodeKind.SCHEDULED_JOB,
|
||||
NodeKind.BUSINESS_PROCESS,
|
||||
NodeKind.TASK,
|
||||
NodeKind.SUBSYSTEM,
|
||||
NodeKind.SEQUENCE,
|
||||
NodeKind.DOCUMENT_NUMERATOR,
|
||||
NodeKind.EVENT_SUBSCRIPTION,
|
||||
NodeKind.SESSION_PARAMETER,
|
||||
NodeKind.COMMON_ATTRIBUTE,
|
||||
NodeKind.FILTER_CRITERION,
|
||||
NodeKind.FUNCTIONAL_OPTION,
|
||||
NodeKind.FUNCTIONAL_OPTION_PARAMETER,
|
||||
NodeKind.DEFINED_TYPE,
|
||||
NodeKind.SETTINGS_STORAGE,
|
||||
NodeKind.COMMON_COMMAND,
|
||||
NodeKind.COMMAND_GROUP,
|
||||
NodeKind.COMMON_FORM,
|
||||
NodeKind.COMMON_LAYOUT,
|
||||
NodeKind.COMMON_PICTURE,
|
||||
NodeKind.WEB_SERVICE,
|
||||
NodeKind.HTTP_SERVICE,
|
||||
NodeKind.WS_REFERENCE,
|
||||
NodeKind.WEBSOCKET_CLIENT,
|
||||
NodeKind.INTEGRATION_SERVICE,
|
||||
NodeKind.BOT,
|
||||
NodeKind.INTERFACE,
|
||||
NodeKind.FULL_TEXT_SEARCH_DICTIONARY,
|
||||
NodeKind.PALETTE_COLOR,
|
||||
NodeKind.STYLE_ITEM,
|
||||
NodeKind.STYLE,
|
||||
NodeKind.LANGUAGE,
|
||||
NodeKind.XDTO_PACKAGE,
|
||||
NodeKind.EXTENSION,
|
||||
NodeKind.ROLE,
|
||||
}
|
||||
_PATH_METADATA_ALIASES = {
|
||||
"catalogs": ("Справочник", NodeKind.CATALOG),
|
||||
@@ -120,6 +151,69 @@ _PATH_METADATA_ALIASES = {
|
||||
"бизнеспроцессы": ("БизнесПроцесс", NodeKind.BUSINESS_PROCESS),
|
||||
"tasks": ("Задача", NodeKind.TASK),
|
||||
"задачи": ("Задача", NodeKind.TASK),
|
||||
"subsystems": ("Подсистема", NodeKind.SUBSYSTEM),
|
||||
"подсистемы": ("Подсистема", NodeKind.SUBSYSTEM),
|
||||
"roles": ("Роль", NodeKind.ROLE),
|
||||
"роли": ("Роль", NodeKind.ROLE),
|
||||
"sequences": ("Последовательность", NodeKind.SEQUENCE),
|
||||
"последовательности": ("Последовательность", NodeKind.SEQUENCE),
|
||||
"documentnumerators": ("НумераторДокументов", NodeKind.DOCUMENT_NUMERATOR),
|
||||
"нумераторыдокументов": ("НумераторДокументов", NodeKind.DOCUMENT_NUMERATOR),
|
||||
"eventsubscriptions": ("ПодпискаНаСобытие", NodeKind.EVENT_SUBSCRIPTION),
|
||||
"подпискинасобытия": ("ПодпискаНаСобытие", NodeKind.EVENT_SUBSCRIPTION),
|
||||
"sessionparameters": ("ПараметрСеанса", NodeKind.SESSION_PARAMETER),
|
||||
"параметрысеанса": ("ПараметрСеанса", NodeKind.SESSION_PARAMETER),
|
||||
"commonattributes": ("ОбщийРеквизит", NodeKind.COMMON_ATTRIBUTE),
|
||||
"общиереквизиты": ("ОбщийРеквизит", NodeKind.COMMON_ATTRIBUTE),
|
||||
"filtercriteria": ("КритерийОтбора", NodeKind.FILTER_CRITERION),
|
||||
"критерииотбора": ("КритерийОтбора", NodeKind.FILTER_CRITERION),
|
||||
"functionaloptions": ("ФункциональнаяОпция", NodeKind.FUNCTIONAL_OPTION),
|
||||
"функциональныеопции": ("ФункциональнаяОпция", NodeKind.FUNCTIONAL_OPTION),
|
||||
"functionaloptionsparameters": ("ПараметрФункциональнойОпции", NodeKind.FUNCTIONAL_OPTION_PARAMETER),
|
||||
"параметрыфункциональныхопций": ("ПараметрФункциональнойОпции", NodeKind.FUNCTIONAL_OPTION_PARAMETER),
|
||||
"definedtypes": ("ОпределяемыйТип", NodeKind.DEFINED_TYPE),
|
||||
"определяемыетипы": ("ОпределяемыйТип", NodeKind.DEFINED_TYPE),
|
||||
"settingsstorages": ("ХранилищеНастроек", NodeKind.SETTINGS_STORAGE),
|
||||
"хранилищанастроек": ("ХранилищеНастроек", NodeKind.SETTINGS_STORAGE),
|
||||
"commoncommands": ("ОбщаяКоманда", NodeKind.COMMON_COMMAND),
|
||||
"общиекоманды": ("ОбщаяКоманда", NodeKind.COMMON_COMMAND),
|
||||
"commandgroups": ("ГруппаКоманд", NodeKind.COMMAND_GROUP),
|
||||
"группыкоманд": ("ГруппаКоманд", NodeKind.COMMAND_GROUP),
|
||||
"commonforms": ("ОбщаяФорма", NodeKind.COMMON_FORM),
|
||||
"общиеформы": ("ОбщаяФорма", NodeKind.COMMON_FORM),
|
||||
"commontemplates": ("ОбщийМакет", NodeKind.COMMON_LAYOUT),
|
||||
"commonlayouts": ("ОбщийМакет", NodeKind.COMMON_LAYOUT),
|
||||
"общиемакеты": ("ОбщийМакет", NodeKind.COMMON_LAYOUT),
|
||||
"commonpictures": ("ОбщаяКартинка", NodeKind.COMMON_PICTURE),
|
||||
"общиекартинки": ("ОбщаяКартинка", NodeKind.COMMON_PICTURE),
|
||||
"xdtopackages": ("XDTO", NodeKind.XDTO_PACKAGE),
|
||||
"xdtoпакеты": ("XDTO", NodeKind.XDTO_PACKAGE),
|
||||
"webservices": ("WebСервис", NodeKind.WEB_SERVICE),
|
||||
"webсервисы": ("WebСервис", NodeKind.WEB_SERVICE),
|
||||
"httpservices": ("HTTPСервис", NodeKind.HTTP_SERVICE),
|
||||
"httpсервисы": ("HTTPСервис", NodeKind.HTTP_SERVICE),
|
||||
"wsreferences": ("WSСсылка", NodeKind.WS_REFERENCE),
|
||||
"wsссылки": ("WSСсылка", NodeKind.WS_REFERENCE),
|
||||
"websocketclients": ("WebSocketКлиент", NodeKind.WEBSOCKET_CLIENT),
|
||||
"websocketклиенты": ("WebSocketКлиент", NodeKind.WEBSOCKET_CLIENT),
|
||||
"integrationservices": ("СервисИнтеграции", NodeKind.INTEGRATION_SERVICE),
|
||||
"сервисыинтеграции": ("СервисИнтеграции", NodeKind.INTEGRATION_SERVICE),
|
||||
"bots": ("Бот", NodeKind.BOT),
|
||||
"боты": ("Бот", NodeKind.BOT),
|
||||
"interfaces": ("Интерфейс", NodeKind.INTERFACE),
|
||||
"интерфейсы": ("Интерфейс", NodeKind.INTERFACE),
|
||||
"fulltextsearchdictionaries": ("СловарьПолнотекстовогоПоиска", NodeKind.FULL_TEXT_SEARCH_DICTIONARY),
|
||||
"словариполнотекстовогопоиска": ("СловарьПолнотекстовогоПоиска", NodeKind.FULL_TEXT_SEARCH_DICTIONARY),
|
||||
"palettecolors": ("ЦветПалитры", NodeKind.PALETTE_COLOR),
|
||||
"цветапалитры": ("ЦветПалитры", NodeKind.PALETTE_COLOR),
|
||||
"styleitems": ("ЭлементСтиля", NodeKind.STYLE_ITEM),
|
||||
"элементыстиля": ("ЭлементСтиля", NodeKind.STYLE_ITEM),
|
||||
"styles": ("Стиль", NodeKind.STYLE),
|
||||
"стили": ("Стиль", NodeKind.STYLE),
|
||||
"languages": ("Язык", NodeKind.LANGUAGE),
|
||||
"языки": ("Язык", NodeKind.LANGUAGE),
|
||||
"extensions": ("Расширение", NodeKind.EXTENSION),
|
||||
"расширения": ("Расширение", NodeKind.EXTENSION),
|
||||
}
|
||||
|
||||
|
||||
@@ -348,6 +442,36 @@ def index_project(path: str | Path, *, project_id: str | None = None, structure_
|
||||
NodeKind.SCHEDULED_JOB,
|
||||
NodeKind.BUSINESS_PROCESS,
|
||||
NodeKind.TASK,
|
||||
NodeKind.SUBSYSTEM,
|
||||
NodeKind.SEQUENCE,
|
||||
NodeKind.DOCUMENT_NUMERATOR,
|
||||
NodeKind.EVENT_SUBSCRIPTION,
|
||||
NodeKind.SESSION_PARAMETER,
|
||||
NodeKind.COMMON_ATTRIBUTE,
|
||||
NodeKind.FILTER_CRITERION,
|
||||
NodeKind.FUNCTIONAL_OPTION,
|
||||
NodeKind.FUNCTIONAL_OPTION_PARAMETER,
|
||||
NodeKind.DEFINED_TYPE,
|
||||
NodeKind.SETTINGS_STORAGE,
|
||||
NodeKind.COMMON_COMMAND,
|
||||
NodeKind.COMMAND_GROUP,
|
||||
NodeKind.COMMON_FORM,
|
||||
NodeKind.COMMON_LAYOUT,
|
||||
NodeKind.COMMON_PICTURE,
|
||||
NodeKind.WEB_SERVICE,
|
||||
NodeKind.HTTP_SERVICE,
|
||||
NodeKind.WS_REFERENCE,
|
||||
NodeKind.WEBSOCKET_CLIENT,
|
||||
NodeKind.INTEGRATION_SERVICE,
|
||||
NodeKind.BOT,
|
||||
NodeKind.INTERFACE,
|
||||
NodeKind.FULL_TEXT_SEARCH_DICTIONARY,
|
||||
NodeKind.PALETTE_COLOR,
|
||||
NodeKind.STYLE_ITEM,
|
||||
NodeKind.STYLE,
|
||||
NodeKind.LANGUAGE,
|
||||
NodeKind.XDTO_PACKAGE,
|
||||
NodeKind.EXTENSION,
|
||||
NodeKind.ROLE,
|
||||
NodeKind.FORM,
|
||||
NodeKind.TABULAR_SECTION,
|
||||
@@ -958,7 +1082,33 @@ def _xml_node_kind(object_kind: str) -> NodeKind | None:
|
||||
"BUSINESS_PROCESS": NodeKind.BUSINESS_PROCESS,
|
||||
"TASK": NodeKind.TASK,
|
||||
"SUBSYSTEM": NodeKind.SUBSYSTEM,
|
||||
"SEQUENCE": NodeKind.SEQUENCE,
|
||||
"DOCUMENT_NUMERATOR": NodeKind.DOCUMENT_NUMERATOR,
|
||||
"EVENT_SUBSCRIPTION": NodeKind.EVENT_SUBSCRIPTION,
|
||||
"SESSION_PARAMETER": NodeKind.SESSION_PARAMETER,
|
||||
"COMMON_ATTRIBUTE": NodeKind.COMMON_ATTRIBUTE,
|
||||
"FILTER_CRITERION": NodeKind.FILTER_CRITERION,
|
||||
"FUNCTIONAL_OPTION": NodeKind.FUNCTIONAL_OPTION,
|
||||
"FUNCTIONAL_OPTION_PARAMETER": NodeKind.FUNCTIONAL_OPTION_PARAMETER,
|
||||
"DEFINED_TYPE": NodeKind.DEFINED_TYPE,
|
||||
"SETTINGS_STORAGE": NodeKind.SETTINGS_STORAGE,
|
||||
"COMMON_COMMAND": NodeKind.COMMON_COMMAND,
|
||||
"COMMAND_GROUP": NodeKind.COMMAND_GROUP,
|
||||
"COMMON_FORM": NodeKind.COMMON_FORM,
|
||||
"COMMON_LAYOUT": NodeKind.COMMON_LAYOUT,
|
||||
"COMMON_PICTURE": NodeKind.COMMON_PICTURE,
|
||||
"WEB_SERVICE": NodeKind.WEB_SERVICE,
|
||||
"HTTP_SERVICE": NodeKind.HTTP_SERVICE,
|
||||
"WS_REFERENCE": NodeKind.WS_REFERENCE,
|
||||
"WEBSOCKET_CLIENT": NodeKind.WEBSOCKET_CLIENT,
|
||||
"INTEGRATION_SERVICE": NodeKind.INTEGRATION_SERVICE,
|
||||
"BOT": NodeKind.BOT,
|
||||
"INTERFACE": NodeKind.INTERFACE,
|
||||
"FULL_TEXT_SEARCH_DICTIONARY": NodeKind.FULL_TEXT_SEARCH_DICTIONARY,
|
||||
"PALETTE_COLOR": NodeKind.PALETTE_COLOR,
|
||||
"STYLE_ITEM": NodeKind.STYLE_ITEM,
|
||||
"STYLE": NodeKind.STYLE,
|
||||
"LANGUAGE": NodeKind.LANGUAGE,
|
||||
"XDTO_PACKAGE": NodeKind.XDTO_PACKAGE,
|
||||
"EXTENSION": NodeKind.EXTENSION,
|
||||
"LAYOUT": NodeKind.LAYOUT,
|
||||
|
||||
@@ -70,6 +70,43 @@ def test_index_project_extracts_1c_metadata_objects(tmp_path: Path):
|
||||
assert any(edge.kind == EdgeKind.HAS_COMMAND for edge in snapshot.edges)
|
||||
|
||||
|
||||
def test_index_project_keeps_extended_1c_metadata_objects(tmp_path: Path):
|
||||
xml = tmp_path / "metadata.xml"
|
||||
xml.write_text(
|
||||
"""
|
||||
<Configuration>
|
||||
<Subsystem name="Продажи" qualifiedName="Подсистема.Продажи" />
|
||||
<Role name="Менеджер" qualifiedName="Роль.Менеджер" />
|
||||
<Sequence name="ПроведениеДокументов" qualifiedName="Последовательность.ПроведениеДокументов" />
|
||||
<DocumentNumerator name="ОбщийНумератор" qualifiedName="НумераторДокументов.ОбщийНумератор" />
|
||||
<CommonForm name="ФормаПодбора" qualifiedName="ОбщаяФорма.ФормаПодбора" />
|
||||
<FunctionalOption name="ДоступностьСкидок" qualifiedName="ФункциональнаяОпция.ДоступностьСкидок" />
|
||||
<WebService name="Обмен" qualifiedName="WebСервис.Обмен" />
|
||||
<WSReference name="ВнешнийСервис" qualifiedName="WSСсылка.ВнешнийСервис" />
|
||||
<WebSocketClient name="Чат" qualifiedName="WebSocketКлиент.Чат" />
|
||||
<IntegrationService name="Интеграция" qualifiedName="СервисИнтеграции.Интеграция" />
|
||||
</Configuration>
|
||||
""",
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
snapshot = index_project(tmp_path, project_id="extended-metadata")
|
||||
by_kind = {node.kind for node in snapshot.nodes}
|
||||
|
||||
assert {
|
||||
NodeKind.SUBSYSTEM,
|
||||
NodeKind.ROLE,
|
||||
NodeKind.SEQUENCE,
|
||||
NodeKind.DOCUMENT_NUMERATOR,
|
||||
NodeKind.COMMON_FORM,
|
||||
NodeKind.FUNCTIONAL_OPTION,
|
||||
NodeKind.WEB_SERVICE,
|
||||
NodeKind.WS_REFERENCE,
|
||||
NodeKind.WEBSOCKET_CLIENT,
|
||||
NodeKind.INTEGRATION_SERVICE,
|
||||
}.issubset(by_kind)
|
||||
|
||||
|
||||
def test_index_project_remaps_edges_from_duplicate_metadata_nodes(tmp_path: Path):
|
||||
first = tmp_path / "first.xml"
|
||||
first.write_text(
|
||||
|
||||
@@ -26,6 +26,32 @@ class NodeKind(str, Enum):
|
||||
BUSINESS_PROCESS = "BUSINESS_PROCESS"
|
||||
TASK = "TASK"
|
||||
SUBSYSTEM = "SUBSYSTEM"
|
||||
SEQUENCE = "SEQUENCE"
|
||||
DOCUMENT_NUMERATOR = "DOCUMENT_NUMERATOR"
|
||||
EVENT_SUBSCRIPTION = "EVENT_SUBSCRIPTION"
|
||||
SESSION_PARAMETER = "SESSION_PARAMETER"
|
||||
COMMON_ATTRIBUTE = "COMMON_ATTRIBUTE"
|
||||
FILTER_CRITERION = "FILTER_CRITERION"
|
||||
FUNCTIONAL_OPTION = "FUNCTIONAL_OPTION"
|
||||
FUNCTIONAL_OPTION_PARAMETER = "FUNCTIONAL_OPTION_PARAMETER"
|
||||
DEFINED_TYPE = "DEFINED_TYPE"
|
||||
SETTINGS_STORAGE = "SETTINGS_STORAGE"
|
||||
COMMON_COMMAND = "COMMON_COMMAND"
|
||||
COMMAND_GROUP = "COMMAND_GROUP"
|
||||
COMMON_FORM = "COMMON_FORM"
|
||||
COMMON_LAYOUT = "COMMON_LAYOUT"
|
||||
COMMON_PICTURE = "COMMON_PICTURE"
|
||||
WEB_SERVICE = "WEB_SERVICE"
|
||||
WS_REFERENCE = "WS_REFERENCE"
|
||||
WEBSOCKET_CLIENT = "WEBSOCKET_CLIENT"
|
||||
INTEGRATION_SERVICE = "INTEGRATION_SERVICE"
|
||||
BOT = "BOT"
|
||||
INTERFACE = "INTERFACE"
|
||||
FULL_TEXT_SEARCH_DICTIONARY = "FULL_TEXT_SEARCH_DICTIONARY"
|
||||
PALETTE_COLOR = "PALETTE_COLOR"
|
||||
STYLE_ITEM = "STYLE_ITEM"
|
||||
STYLE = "STYLE"
|
||||
LANGUAGE = "LANGUAGE"
|
||||
HTTP_SERVICE = "HTTP_SERVICE"
|
||||
XDTO_PACKAGE = "XDTO_PACKAGE"
|
||||
EXTENSION = "EXTENSION"
|
||||
|
||||
@@ -287,6 +287,37 @@ _ACCESS_TARGET_KINDS = {
|
||||
NodeKind.SCHEDULED_JOB,
|
||||
NodeKind.BUSINESS_PROCESS,
|
||||
NodeKind.TASK,
|
||||
NodeKind.SUBSYSTEM,
|
||||
NodeKind.SEQUENCE,
|
||||
NodeKind.DOCUMENT_NUMERATOR,
|
||||
NodeKind.EVENT_SUBSCRIPTION,
|
||||
NodeKind.SESSION_PARAMETER,
|
||||
NodeKind.COMMON_ATTRIBUTE,
|
||||
NodeKind.FILTER_CRITERION,
|
||||
NodeKind.FUNCTIONAL_OPTION,
|
||||
NodeKind.FUNCTIONAL_OPTION_PARAMETER,
|
||||
NodeKind.DEFINED_TYPE,
|
||||
NodeKind.SETTINGS_STORAGE,
|
||||
NodeKind.COMMON_COMMAND,
|
||||
NodeKind.COMMAND_GROUP,
|
||||
NodeKind.COMMON_FORM,
|
||||
NodeKind.COMMON_LAYOUT,
|
||||
NodeKind.COMMON_PICTURE,
|
||||
NodeKind.WEB_SERVICE,
|
||||
NodeKind.HTTP_SERVICE,
|
||||
NodeKind.WS_REFERENCE,
|
||||
NodeKind.WEBSOCKET_CLIENT,
|
||||
NodeKind.INTEGRATION_SERVICE,
|
||||
NodeKind.BOT,
|
||||
NodeKind.INTERFACE,
|
||||
NodeKind.FULL_TEXT_SEARCH_DICTIONARY,
|
||||
NodeKind.PALETTE_COLOR,
|
||||
NodeKind.STYLE_ITEM,
|
||||
NodeKind.STYLE,
|
||||
NodeKind.LANGUAGE,
|
||||
NodeKind.XDTO_PACKAGE,
|
||||
NodeKind.EXTENSION,
|
||||
NodeKind.ROLE,
|
||||
}
|
||||
if _EVENT_SUBSCRIPTION_KIND is not None:
|
||||
_ACCESS_TARGET_KINDS.add(_EVENT_SUBSCRIPTION_KIND)
|
||||
@@ -299,6 +330,18 @@ _OWNERSHIP_TARGET_KINDS = {
|
||||
NodeKind.SCHEDULED_JOB,
|
||||
NodeKind.BUSINESS_PROCESS,
|
||||
NodeKind.TASK,
|
||||
NodeKind.SUBSYSTEM,
|
||||
NodeKind.SEQUENCE,
|
||||
NodeKind.DOCUMENT_NUMERATOR,
|
||||
NodeKind.COMMON_FORM,
|
||||
NodeKind.COMMON_COMMAND,
|
||||
NodeKind.HTTP_SERVICE,
|
||||
NodeKind.WEB_SERVICE,
|
||||
NodeKind.WS_REFERENCE,
|
||||
NodeKind.WEBSOCKET_CLIENT,
|
||||
NodeKind.INTEGRATION_SERVICE,
|
||||
NodeKind.BOT,
|
||||
NodeKind.ROLE,
|
||||
}
|
||||
if _EVENT_SUBSCRIPTION_KIND is not None:
|
||||
_OWNERSHIP_TARGET_KINDS.add(_EVENT_SUBSCRIPTION_KIND)
|
||||
@@ -3905,6 +3948,43 @@ _FLOWCHART_KIND_LABELS = {
|
||||
NodeKind.REGISTER: "Регистры",
|
||||
NodeKind.REPORT: "Отчеты",
|
||||
NodeKind.DATA_PROCESSOR: "Обработки",
|
||||
NodeKind.CONSTANT: "Константы",
|
||||
NodeKind.DOCUMENT_JOURNAL: "Журналы документов",
|
||||
NodeKind.ENUM: "Перечисления",
|
||||
NodeKind.CHART_OF_CHARACTERISTIC_TYPES: "Планы видов характеристик",
|
||||
NodeKind.CHART_OF_ACCOUNTS: "Планы счетов",
|
||||
NodeKind.CHART_OF_CALCULATION_TYPES: "Планы видов расчета",
|
||||
NodeKind.EXCHANGE_PLAN: "Планы обмена",
|
||||
NodeKind.EXTERNAL_DATA_SOURCE: "Внешние источники данных",
|
||||
NodeKind.BUSINESS_PROCESS: "Бизнес-процессы",
|
||||
NodeKind.TASK: "Задачи",
|
||||
NodeKind.SUBSYSTEM: "Подсистемы",
|
||||
NodeKind.SEQUENCE: "Последовательности",
|
||||
NodeKind.DOCUMENT_NUMERATOR: "Нумераторы документов",
|
||||
NodeKind.EVENT_SUBSCRIPTION: "Подписки на события",
|
||||
NodeKind.SESSION_PARAMETER: "Параметры сеанса",
|
||||
NodeKind.COMMON_ATTRIBUTE: "Общие реквизиты",
|
||||
NodeKind.FILTER_CRITERION: "Критерии отбора",
|
||||
NodeKind.FUNCTIONAL_OPTION: "Функциональные опции",
|
||||
NodeKind.FUNCTIONAL_OPTION_PARAMETER: "Параметры функциональных опций",
|
||||
NodeKind.DEFINED_TYPE: "Определяемые типы",
|
||||
NodeKind.SETTINGS_STORAGE: "Хранилища настроек",
|
||||
NodeKind.COMMON_COMMAND: "Общие команды",
|
||||
NodeKind.COMMAND_GROUP: "Группы команд",
|
||||
NodeKind.COMMON_FORM: "Общие формы",
|
||||
NodeKind.COMMON_LAYOUT: "Общие макеты",
|
||||
NodeKind.COMMON_PICTURE: "Общие картинки",
|
||||
NodeKind.WEB_SERVICE: "Web-сервисы",
|
||||
NodeKind.WS_REFERENCE: "WS-ссылки",
|
||||
NodeKind.WEBSOCKET_CLIENT: "WebSocket-клиенты",
|
||||
NodeKind.INTEGRATION_SERVICE: "Сервисы интеграции",
|
||||
NodeKind.BOT: "Боты",
|
||||
NodeKind.INTERFACE: "Интерфейсы",
|
||||
NodeKind.FULL_TEXT_SEARCH_DICTIONARY: "Словари полнотекстового поиска",
|
||||
NodeKind.PALETTE_COLOR: "Цвета палитры",
|
||||
NodeKind.STYLE_ITEM: "Элементы стиля",
|
||||
NodeKind.STYLE: "Стили",
|
||||
NodeKind.LANGUAGE: "Языки",
|
||||
NodeKind.HTTP_SERVICE: "HTTP-сервисы",
|
||||
NodeKind.INTEGRATION_ENDPOINT: "Интеграции",
|
||||
NodeKind.SCHEDULED_JOB: "Регламентные задания",
|
||||
|
||||
@@ -19,6 +19,10 @@ _EVENT_SUBSCRIPTION_KIND = getattr(NodeKind, "EVENT_SUBSCRIPTION", None)
|
||||
_METADATA_ICON_BY_NODE_KIND = {
|
||||
NodeKind.EXCHANGE_PLAN: "exchange-plan",
|
||||
NodeKind.SCHEDULED_JOB: "scheduled-job",
|
||||
NodeKind.SUBSYSTEM: "subsystem",
|
||||
NodeKind.SEQUENCE: "sequence",
|
||||
NodeKind.DOCUMENT_NUMERATOR: "numbering",
|
||||
NodeKind.EVENT_SUBSCRIPTION: "event",
|
||||
NodeKind.ATTRIBUTE: "attribute",
|
||||
NodeKind.COMMAND: "command",
|
||||
NodeKind.FORM: "form",
|
||||
@@ -52,6 +56,36 @@ _METADATA_SPEC_PREFIXES = {
|
||||
"EXCHANGE_PLAN": "ПланОбмена.",
|
||||
"EVENT_SUBSCRIPTION": "ПодпискаНаСобытие.",
|
||||
"SCHEDULED_JOB": "РегламентноеЗадание.",
|
||||
"SUBSYSTEM": "Подсистема.",
|
||||
"ROLE": "Роль.",
|
||||
"SEQUENCE": "Последовательность.",
|
||||
"DOCUMENT_NUMERATOR": "НумераторДокументов.",
|
||||
"EXTENSION": "Расширение.",
|
||||
"SESSION_PARAMETER": "ПараметрСеанса.",
|
||||
"COMMON_ATTRIBUTE": "ОбщийРеквизит.",
|
||||
"FILTER_CRITERION": "КритерийОтбора.",
|
||||
"FUNCTIONAL_OPTION": "ФункциональнаяОпция.",
|
||||
"FUNCTIONAL_OPTION_PARAMETER": "ПараметрФункциональнойОпции.",
|
||||
"DEFINED_TYPE": "ОпределяемыйТип.",
|
||||
"SETTINGS_STORAGE": "ХранилищеНастроек.",
|
||||
"COMMON_COMMAND": "ОбщаяКоманда.",
|
||||
"COMMAND_GROUP": "ГруппаКоманд.",
|
||||
"COMMON_FORM": "ОбщаяФорма.",
|
||||
"COMMON_LAYOUT": "ОбщийМакет.",
|
||||
"COMMON_PICTURE": "ОбщаяКартинка.",
|
||||
"XDTO_PACKAGE": "XDTO.",
|
||||
"WEB_SERVICE": "WebСервис.",
|
||||
"HTTP_SERVICE": "HTTPСервис.",
|
||||
"WS_REFERENCE": "WSСсылка.",
|
||||
"WEBSOCKET_CLIENT": "WebSocketКлиент.",
|
||||
"INTEGRATION_SERVICE": "СервисИнтеграции.",
|
||||
"BOT": "Бот.",
|
||||
"INTERFACE": "Интерфейс.",
|
||||
"FULL_TEXT_SEARCH_DICTIONARY": "СловарьПолнотекстовогоПоиска.",
|
||||
"PALETTE_COLOR": "ЦветПалитры.",
|
||||
"STYLE_ITEM": "ЭлементСтиля.",
|
||||
"STYLE": "Стиль.",
|
||||
"LANGUAGE": "Язык.",
|
||||
}
|
||||
|
||||
|
||||
@@ -67,6 +101,36 @@ _METADATA_SPEC_NODE_KINDS = {
|
||||
"TASK": {NodeKind.TASK},
|
||||
"EXCHANGE_PLAN": {NodeKind.EXCHANGE_PLAN},
|
||||
"SCHEDULED_JOB": {NodeKind.SCHEDULED_JOB},
|
||||
"SUBSYSTEM": {NodeKind.SUBSYSTEM},
|
||||
"ROLE": {NodeKind.ROLE},
|
||||
"SEQUENCE": {NodeKind.SEQUENCE},
|
||||
"DOCUMENT_NUMERATOR": {NodeKind.DOCUMENT_NUMERATOR},
|
||||
"EXTENSION": {NodeKind.EXTENSION},
|
||||
"SESSION_PARAMETER": {NodeKind.SESSION_PARAMETER},
|
||||
"COMMON_ATTRIBUTE": {NodeKind.COMMON_ATTRIBUTE},
|
||||
"FILTER_CRITERION": {NodeKind.FILTER_CRITERION},
|
||||
"FUNCTIONAL_OPTION": {NodeKind.FUNCTIONAL_OPTION},
|
||||
"FUNCTIONAL_OPTION_PARAMETER": {NodeKind.FUNCTIONAL_OPTION_PARAMETER},
|
||||
"DEFINED_TYPE": {NodeKind.DEFINED_TYPE},
|
||||
"SETTINGS_STORAGE": {NodeKind.SETTINGS_STORAGE},
|
||||
"COMMON_COMMAND": {NodeKind.COMMON_COMMAND},
|
||||
"COMMAND_GROUP": {NodeKind.COMMAND_GROUP},
|
||||
"COMMON_FORM": {NodeKind.COMMON_FORM},
|
||||
"COMMON_LAYOUT": {NodeKind.COMMON_LAYOUT},
|
||||
"COMMON_PICTURE": {NodeKind.COMMON_PICTURE},
|
||||
"XDTO_PACKAGE": {NodeKind.XDTO_PACKAGE},
|
||||
"WEB_SERVICE": {NodeKind.WEB_SERVICE},
|
||||
"HTTP_SERVICE": {NodeKind.HTTP_SERVICE},
|
||||
"WS_REFERENCE": {NodeKind.WS_REFERENCE},
|
||||
"WEBSOCKET_CLIENT": {NodeKind.WEBSOCKET_CLIENT},
|
||||
"INTEGRATION_SERVICE": {NodeKind.INTEGRATION_SERVICE},
|
||||
"BOT": {NodeKind.BOT},
|
||||
"INTERFACE": {NodeKind.INTERFACE},
|
||||
"FULL_TEXT_SEARCH_DICTIONARY": {NodeKind.FULL_TEXT_SEARCH_DICTIONARY},
|
||||
"PALETTE_COLOR": {NodeKind.PALETTE_COLOR},
|
||||
"STYLE_ITEM": {NodeKind.STYLE_ITEM},
|
||||
"STYLE": {NodeKind.STYLE},
|
||||
"LANGUAGE": {NodeKind.LANGUAGE},
|
||||
}
|
||||
if _EVENT_SUBSCRIPTION_KIND is not None:
|
||||
_METADATA_SPEC_NODE_KINDS["EVENT_SUBSCRIPTION"] = {_EVENT_SUBSCRIPTION_KIND}
|
||||
|
||||
@@ -1471,6 +1471,8 @@ def test_import_supports_structure_only_indexing(tmp_path: Path):
|
||||
<Configuration>
|
||||
<HTTPService name="ПубличныйAPI" qualifiedName="HTTPСервис.ПубличныйAPI" />
|
||||
<Subsystem name="Продажи" qualifiedName="Подсистема.Продажи" />
|
||||
<Sequence name="ПроведениеДокументов" qualifiedName="Последовательность.ПроведениеДокументов" />
|
||||
<DocumentNumerator name="ОбщийНумератор" qualifiedName="НумераторДокументов.ОбщийНумератор" />
|
||||
<Role name="Менеджер" qualifiedName="Роль.Менеджер">
|
||||
<Right object="HTTPСервис.ПубличныйAPI" read="true" />
|
||||
</Role>
|
||||
@@ -1491,7 +1493,7 @@ def test_import_supports_structure_only_indexing(tmp_path: Path):
|
||||
assert payload["status"] == "structure_indexed"
|
||||
assert payload["snapshot"]["project_id"] == project_id
|
||||
assert payload["object_count"] >= 2
|
||||
assert payload["normalized_summary"]["group_count"] >= 3
|
||||
assert payload["normalized_summary"]["group_count"] >= 5
|
||||
assert payload["normalized_summary"]["rights_count"] == 1
|
||||
|
||||
setup = client.get(f"/projects/{project_id}/setup")
|
||||
@@ -1513,7 +1515,7 @@ def test_import_supports_structure_only_indexing(tmp_path: Path):
|
||||
normalized = client.get(f"/projects/{project_id}/normalized")
|
||||
assert normalized.status_code == 200
|
||||
groups = {group["name"] for group in normalized.json()["configuration"]["groups"]}
|
||||
assert {"HTTP-сервисы", "Подсистемы", "Роли"}.issubset(groups)
|
||||
assert {"HTTP-сервисы", "Подсистемы", "Роли", "Последовательности", "Нумераторы документов"}.issubset(groups)
|
||||
|
||||
detail = client.get(
|
||||
f"/projects/{project_id}/normalized/object",
|
||||
@@ -1535,7 +1537,8 @@ def test_import_supports_structure_only_indexing(tmp_path: Path):
|
||||
]
|
||||
main_configuration = root["children"][0]
|
||||
common = next(item for item in main_configuration["children"] if item["label"] == "Общие")
|
||||
assert any(item["label"] == "HTTP-сервисы" for item in common["children"])
|
||||
common_labels = {item["label"] for item in common["children"]}
|
||||
assert {"HTTP-сервисы", "Подсистемы", "Последовательности", "Нумераторы документов"}.issubset(common_labels)
|
||||
|
||||
|
||||
def test_import_full_replace_replaces_current_normalized_project(tmp_path: Path):
|
||||
|
||||
Reference in New Issue
Block a user