Skip to content

Conversation

@Kirill
Copy link

@Kirill Kirill commented Nov 6, 2025

Добавлен новый сценарий валидации XML-файла без логики

Summary by CodeRabbit

  • Новые возможности
    • Добавлен модуль проверки корректности XML: валидирует файлы, логирует результаты и возвращает статус обработки.
  • Тесты
    • Добавлены тесты покрывающие успешную обработку, ошибки валидации, несуществующие и не‑XML файлы.
  • Данные для тестирования
    • Добавлены наборы корректных и некорректных XML‑фикстур для различных метаданных и форм.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link

coderabbitai bot commented Nov 6, 2025

Walkthrough

Добавлен сценарий "ПроверкаКорректностиXML" для фильтрации файлов по дескрипторам и синтаксической проверки XML: экспортированы функции ИмяСценария и ОбработатьФайл; при обработке ведётся логирование, чтение файла и обработка исключений валидности XML.

Changes

Когорта / Файл(ы) Сводка изменений
Новый модуль сценария
src/СценарииОбработки/ПроверкаКорректностиXML.os
Добавлен модуль с экспортируемыми функциями ИмяСценария() и ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры). Фильтрация по типу файла, логирование, вызов ПроверитьНаКорректностьXML, обработка исключений и повторная генерация ошибок.
Тестовый файл сценариев
tests/ТестПроверкаСценариевОбработки.os
Добавлены четыре экспортные тест-процедуры для проверки корректных и некорректных XML, несуществующих и не‑XML файлов; обновлён список тестов (ПолучитьСписокТестов).
Фикстуры — Конфигурация (Configurator)
tests/fixtures/ПроверкаКорректностиXML/Configurator/Configuration.xml, tests/fixtures/ПроверкаКорректностиXML/Configurator/Некорректные/Configuration.xml
Добавлены корректная и намеренно некорректная конфигурации для тестов (одна с незакрытым тегом).
Фикстуры — EDT
tests/fixtures/ПроверкаКорректностиXML/EDT/Configuration.mdo, tests/fixtures/ПроверкаКорректностиXML/EDT/Некорректные/Configuration.mdo
Добавлены корректная и некорректная MDO‑фикстуры.
Фикстуры — Catalogs
tests/fixtures/ПроверкаКорректностиXML/Catalogs/Справочник/Справочник.xml, tests/fixtures/ПроверкаКорректностиXML/Catalogs/Справочник/Справочник.mdo, tests/fixtures/ПроверкаКорректностиXML/Catalogs/Справочник/Некорректные/Справочник.xml
Добавлены корректные и некорректные файлы метаданных каталога (XML и MDO).
Фикстуры — ExchangePlans
tests/fixtures/ПроверкаКорректностиXML/ExchangePlans/ПланОбмена/ПланОбмена.mdo, tests/fixtures/ПроверкаКорректностиXML/ExchangePlans/ПланОбмена/Content.xml, tests/fixtures/ПроверкаКорректностиXML/ExchangePlans/ПланОбмена/Некорректные/Content.xml
Добавлены корректные и некорректные фикстуры планов обмена.
Фикстуры — Forms (Configurator/EDT)
tests/fixtures/ПроверкаКорректностиXML/Forms/Configurator/Form.xml, tests/fixtures/ПроверкаКорректностиXML/Forms/Configurator/Некорректные/Form.xml, tests/fixtures/ПроверкаКорректностиXML/Forms/EDT/Form.form, tests/fixtures/ПроверкаКорректностиXML/Forms/EDT/Некорректные/Form.form
Добавлены корректные и некорректные формы UI (Configurator и EDT).
Фикстуры — FunctionalOptions
tests/fixtures/ПроверкаКорректностиXML/FunctionalOptions/ФункциональнаяОпция/ФункциональнаяОпция.mdo, tests/fixtures/ПроверкаКорректностиXML/FunctionalOptions/ФункциональнаяОпция/ФункциональнаяОпция.xml
Добавлены корректные MDO и XML файлы функциональной опции.

Sequence Diagram(s)

sequenceDiagram
    participant Caller as Вызывающая сторона
    participant Module as ПроверкаКорректностиXML
    participant Logger as Логгер
    participant FS as Файловая система / XML Reader

    Caller->>Module: ОбработатьФайл(АнализируемыйФайл, Каталог, Доп.Параметры)
    alt Тип файла соответствует дескриптору
        Module->>Logger: Лог: начало обработки
        Module->>FS: Открыть и читать XML (построчно/итерация)
        alt Успешное чтение до конца
            FS-->>Module: Чтение завершено
            Module->>Logger: Лог: успешная валидация
            Module-->>Caller: true
        else Ошибка парсинга/синтаксиса
            FS-->>Module: Исключение
            Module->>Logger: Лог: ошибка с путём файла
            Module-->>Caller: перебросить исключение
        end
    else Несоответствие типа
        Module-->>Caller: false
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐰 Я кролик, бегаю по файлам,
Теги считаю, хвостиком махаю,
Если XML честен — я рад, улыбаюсь,
Нашёл ошибку — в лог я её кладу,
И снова в норку, с новым тестом шагаю.

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed Заголовок PR точно отражает основное изменение — добавление нового сценария ПроверкаКорректностиXML, что соответствует содержимому changeset'а.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
src/СценарииОбработки/ПроверкаКорректностиXML.os (1)

40-40: Уберите неиспользуемое получение настроек.

НастройкиСценария нигде не применяется, поэтому вызов ДополнительныеПараметры.Настройки.Получить() только расходует ресурсы и потенциально может бросить исключение при отсутствии ключа. Предлагаю удалить строку до появления реального использования.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b1e4489 and fd88e72.

📒 Files selected for processing (1)
  • src/СценарииОбработки/ПроверкаКорректностиXML.os (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-11-03T09:51:07.133Z
Learnt from: Kyrales
Repo: bia-technologies/precommit4onec PR: 48
File: src/СценарииОбработки/СинхронизацияОбъектовМетаданныхИФайлов.os:0-0
Timestamp: 2025-11-03T09:51:07.133Z
Learning: В функции СинхронизироватьМетаданныеИФайлыПВХ в файле src/СценарииОбработки/СинхронизацияОбъектовМетаданныхИФайлов.os массив МассивОшибокПриПоискеФайловОбъектов намеренно игнорируется, так как эти ошибки актуальны только для функции СинхронизироватьМетаданныеИФайлы(), но не для обработки планов видов характеристик (ПВХ).

Applied to files:

  • src/СценарииОбработки/ПроверкаКорректностиXML.os


Лог = ДополнительныеПараметры.Лог;
НастройкиСценария = ДополнительныеПараметры.Настройки.Получить(ИмяСценария());
Если АнализируемыйФайл.Существует() И (

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Почему только данные файлы анализируются?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А какие еще есть варианты проверить, что файлы XML, и принадлежат вообще проекту, а не документация с кривой XML?

Добавлен новый сценарий валидации XML-файла без логики
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (1)
src/СценарииОбработки/ПроверкаКорректностиXML.os (1)

61-79: Закрывайте XML-читатель в блоке исключения.

Если валидация выбрасывает исключение до вызова ФайлXML.Закрыть() на строке 69, файловый дескриптор остаётся открытым. При обработке множества файлов это может привести к исчерпанию дескрипторов или блокировке файлов.

🔎 Рекомендуемое исправление

Вариант 1 (предпочтительный): Использование try/finally для гарантированного закрытия

 Процедура ПроверитьНаКорректностьXML(ПутьКФайлуМодуля) 
 	
 	ФайлXML = Новый ЧтениеXML();
 	Попытка
 		ФайлXML.ОткрытьФайл(ПутьКФайлуМодуля);
 		ФайлXML.ПерейтиКСодержимому();
 		Пока ФайлXML.Прочитать() Цикл
 		КонецЦикла;
-		ФайлXML.Закрыть();
 	Исключение
 		Инфо = ИнформацияОбОшибке();
 		ТекстОшибки = СтрШаблон("В файле '%1' нарушена корректность XML: %2", ПутьКФайлуМодуля, Инфо.Описание);
 		Лог.Ошибка(ТекстОшибки);
 		
 		ВызватьИсключение ТекстОшибки;
-
+	Конечно
+		Попытка
+			ФайлXML.Закрыть();
+		Исключение
+		КонецПопытки;
 	КонецПопытки;
 	
 КонецПроцедуры

Вариант 2: Закрытие в обработчике исключения

 	Попытка
 		ФайлXML.ОткрытьФайл(ПутьКФайлуМодуля);
 		ФайлXML.ПерейтиКСодержимому();
 		Пока ФайлXML.Прочитать() Цикл
 		КонецЦикла;
 		ФайлXML.Закрыть();
 	Исключение
+		Попытка
+			ФайлXML.Закрыть();
+		Исключение
+		КонецПопытки;
 		Инфо = ИнформацияОбОшибке();
 		ТекстОшибки = СтрШаблон("В файле '%1' нарушена корректность XML: %2", ПутьКФайлуМодуля, Инфо.Описание);
 		Лог.Ошибка(ТекстОшибки);
 		
 		ВызватьИсключение ТекстОшибки;
🧹 Nitpick comments (1)
tests/ТестПроверкаСценариевОбработки.os (1)

352-417: Тесты корректной обработки XML-файлов реализованы правильно.

Тесты охватывают различные типы XML-файлов (конфигурации, формы, метаданные, планы обмена, функциональные опции) в форматах конфигуратора и EDT. Логика проверки единообразна и понятна.

Код содержит значительное повторение, но это приемлемо для ясности тестов. При желании можно вынести общую логику в вспомогательный метод.

🔎 Опциональная оптимизация: вынести повторяющуюся логику в помощник

Можно создать вспомогательную процедуру для уменьшения дублирования:

Процедура ПроверитьОбработкуXMLФайла(ОбъектСценария, ОтносительныйПуть, ОписаниеФайла, ДополнительныеНастройки)
	Файл = Новый Файл(ОбъединитьПути(КаталогТестовыхФикстур(), "ПроверкаКорректностиXML", ОтносительныйПуть));
	Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ДополнительныеНастройки);
	Ожидаем.Что(Результат, ОписаниеФайла + " должен быть обработан").ЭтоИстина();
КонецПроцедуры

Затем использовать:

ПроверитьОбработкуXMLФайла(ОбъектСценария, "Configurator\Configuration.xml", "Configuration.xml", ДополнительныеНастройки);
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between fd88e72 and 97f29fc.

📒 Files selected for processing (18)
  • src/СценарииОбработки/ПроверкаКорректностиXML.os
  • tests/fixtures/ПроверкаКорректностиXML/Catalogs/Справочник/Некорректные/Справочник.xml
  • tests/fixtures/ПроверкаКорректностиXML/Catalogs/Справочник/Справочник.mdo
  • tests/fixtures/ПроверкаКорректностиXML/Catalogs/Справочник/Справочник.xml
  • tests/fixtures/ПроверкаКорректностиXML/Configurator/Configuration.xml
  • tests/fixtures/ПроверкаКорректностиXML/Configurator/Некорректные/Configuration.xml
  • tests/fixtures/ПроверкаКорректностиXML/EDT/Configuration.mdo
  • tests/fixtures/ПроверкаКорректностиXML/EDT/Некорректные/Configuration.mdo
  • tests/fixtures/ПроверкаКорректностиXML/ExchangePlans/ПланОбмена/Content.xml
  • tests/fixtures/ПроверкаКорректностиXML/ExchangePlans/ПланОбмена/Некорректные/Content.xml
  • tests/fixtures/ПроверкаКорректностиXML/ExchangePlans/ПланОбмена/ПланОбмена.mdo
  • tests/fixtures/ПроверкаКорректностиXML/Forms/Configurator/Form.xml
  • tests/fixtures/ПроверкаКорректностиXML/Forms/Configurator/Некорректные/Form.xml
  • tests/fixtures/ПроверкаКорректностиXML/Forms/EDT/Form.form
  • tests/fixtures/ПроверкаКорректностиXML/Forms/EDT/Некорректные/Form.form
  • tests/fixtures/ПроверкаКорректностиXML/FunctionalOptions/ФункциональнаяОпция/ФункциональнаяОпция.mdo
  • tests/fixtures/ПроверкаКорректностиXML/FunctionalOptions/ФункциональнаяОпция/ФункциональнаяОпция.xml
  • tests/ТестПроверкаСценариевОбработки.os
✅ Files skipped from review due to trivial changes (7)
  • tests/fixtures/ПроверкаКорректностиXML/EDT/Некорректные/Configuration.mdo
  • tests/fixtures/ПроверкаКорректностиXML/EDT/Configuration.mdo
  • tests/fixtures/ПроверкаКорректностиXML/FunctionalOptions/ФункциональнаяОпция/ФункциональнаяОпция.mdo
  • tests/fixtures/ПроверкаКорректностиXML/Catalogs/Справочник/Справочник.xml
  • tests/fixtures/ПроверкаКорректностиXML/Catalogs/Справочник/Справочник.mdo
  • tests/fixtures/ПроверкаКорректностиXML/Forms/EDT/Некорректные/Form.form
  • tests/fixtures/ПроверкаКорректностиXML/Forms/Configurator/Некорректные/Form.xml
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-11-03T09:51:07.133Z
Learnt from: Kyrales
Repo: bia-technologies/precommit4onec PR: 48
File: src/СценарииОбработки/СинхронизацияОбъектовМетаданныхИФайлов.os:0-0
Timestamp: 2025-11-03T09:51:07.133Z
Learning: В функции СинхронизироватьМетаданныеИФайлыПВХ в файле src/СценарииОбработки/СинхронизацияОбъектовМетаданныхИФайлов.os массив МассивОшибокПриПоискеФайловОбъектов намеренно игнорируется, так как эти ошибки актуальны только для функции СинхронизироватьМетаданныеИФайлы(), но не для обработки планов видов характеристик (ПВХ).

Applied to files:

  • src/СценарииОбработки/ПроверкаКорректностиXML.os
  • tests/ТестПроверкаСценариевОбработки.os
🔇 Additional comments (16)
tests/fixtures/ПроверкаКорректностиXML/ExchangePlans/ПланОбмена/ПланОбмена.mdo (1)

1-9: Фикстура валидного XML корректна.

Структура XML соответствует формату метаданных 1C для плана обмена. UUID является тестовым значением, что приемлемо для фикстур.

src/СценарииОбработки/ПроверкаКорректностиXML.os (2)

15-19: LGTM!

Функция корректно возвращает имя сценария обработки.


41-48: Логика фильтрации файлов корректна.

Сценарий проверяет корректность XML для основных типов метаданных 1C (конфигурация, формы, планы обмена, функциональные опции). Выбор этих типов обоснован — они являются ключевыми XML-файлами в структуре конфигурации 1C.

Тесты полностью покрывают все типы файлов, указанные в проверке. В файле tests/ТестПроверкаСценариевОбработки.os (область ПроверкаКорректностиXML, строки 350–474) присутствуют тесты для Configuration.xml/mdo, Form.xml/form, метаданных в обоих форматах, планов обмена и функциональных опций, а также дополнительные тесты на обработку несуществующих и некорректных файлов.

tests/fixtures/ПроверкаКорректностиXML/Forms/Configurator/Form.xml (1)

1-13: Фикстура валидного XML формы корректна.

Структура соответствует формату метаданных форм 1C с правильными пространствами имён и версией.

tests/fixtures/ПроверкаКорректностиXML/Configurator/Configuration.xml (1)

1-15: Фикстура валидного XML конфигурации корректна.

XML-структура соответствует формату метаданных конфигурации 1C.

tests/fixtures/ПроверкаКорректностиXML/ExchangePlans/ПланОбмена/Content.xml (1)

1-15: Фикстура валидного XML плана обмена корректна.

Структура Content.xml соответствует формату метаданных плана обмена 1C.

tests/fixtures/ПроверкаКорректностиXML/FunctionalOptions/ФункциональнаяОпция/ФункциональнаяОпция.xml (1)

1-15: Фикстура валидного XML функциональной опции корректна.

Структура соответствует формату метаданных функциональной опции 1C.

tests/fixtures/ПроверкаКорректностиXML/ExchangePlans/ПланОбмена/Некорректные/Content.xml (1)

1-15: Фикстура невалидного XML корректна для негативного теста.

XML умышленно некорректен (незакрытый тег ExchangePlan на строке 3), что должно приводить к ошибке при валидации. Это подходит для проверки обработки ошибок в сценарии.

tests/fixtures/ПроверкаКорректностиXML/Catalogs/Справочник/Некорректные/Справочник.xml (1)

1-15: Фикстура невалидного XML корректна для негативного теста.

XML умышленно некорректен: на строке 9 используется неэкранированный символ & в содержимом (должен быть &). Это делает XML невалидным и подходит для проверки обработки ошибок парсинга.

tests/fixtures/ПроверкаКорректностиXML/Configurator/Некорректные/Configuration.xml (1)

1-15: Тестовая фикстура корректна для негативного теста.

Файл правильно содержит невалидный XML (незакрытый тег MetaDataObject) для проверки обработки ошибок. Комментарий на строке 14 чётко указывает на намеренную ошибку.

tests/fixtures/ПроверкаКорректностиXML/Forms/EDT/Form.form (1)

1-110: Тестовая фикстура корректна для позитивного теста.

Файл содержит валидную XML-конфигурацию формы EDT с правильной структурой. Подходит для проверки корректной обработки XML-файлов.

tests/ТестПроверкаСценариевОбработки.os (5)

52-55: Регистрация тестов выполнена корректно.

Новые тесты правильно добавлены в список тестов, имена соответствуют процедурам, определённым в области #Область ПроверкаКорректностиXML.


419-454: Тесты обработки невалидного XML реализованы корректно.

Проверка исключений для некорректных XML-файлов охватывает различные типы файлов. Использование вспомогательного метода ВызываетсяИсключениеСТекстом с единообразным текстом ошибки обеспечивает согласованность тестов.


456-464: Тест для несуществующего файла реализован корректно.

Проверка правильно убеждается, что сценарий возвращает false для несуществующих файлов, что является ожидаемым поведением.


466-474: Тест для не-XML файла реализован корректно.

Проверка правильно убеждается, что сценарий не обрабатывает файлы с расширением .bsl (исходные файлы 1C), возвращая false.


350-351: Организация кода в области выполнена правильно.

Новые тесты правильно размещены в отдельной области #Область ПроверкаКорректностиXML, что соответствует структуре файла и облегчает навигацию.

Also applies to: 476-477

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants