-
Notifications
You must be signed in to change notification settings - Fork 22
Add new scenario ПроверкаКорректностиXML #52
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Conversation
WalkthroughДобавлен сценарий "ПроверкаКорректностиXML" для фильтрации файлов по дескрипторам и синтаксической проверки XML: экспортированы функции ИмяСценария и ОбработатьФайл; при обработке ведётся логирование, чтение файла и обработка исключений валидности XML. Changes
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
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Poem
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this 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
📒 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
|
|
||
| Лог = ДополнительныеПараметры.Лог; | ||
| НастройкиСценария = ДополнительныеПараметры.Настройки.Получить(ИмяСценария()); | ||
| Если АнализируемыйФайл.Существует() И ( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Почему только данные файлы анализируются?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
А какие еще есть варианты проверить, что файлы XML, и принадлежат вообще проекту, а не документация с кривой XML?
Добавлен новый сценарий валидации XML-файла без логики
There was a problem hiding this 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
📒 Files selected for processing (18)
src/СценарииОбработки/ПроверкаКорректностиXML.ostests/fixtures/ПроверкаКорректностиXML/Catalogs/Справочник/Некорректные/Справочник.xmltests/fixtures/ПроверкаКорректностиXML/Catalogs/Справочник/Справочник.mdotests/fixtures/ПроверкаКорректностиXML/Catalogs/Справочник/Справочник.xmltests/fixtures/ПроверкаКорректностиXML/Configurator/Configuration.xmltests/fixtures/ПроверкаКорректностиXML/Configurator/Некорректные/Configuration.xmltests/fixtures/ПроверкаКорректностиXML/EDT/Configuration.mdotests/fixtures/ПроверкаКорректностиXML/EDT/Некорректные/Configuration.mdotests/fixtures/ПроверкаКорректностиXML/ExchangePlans/ПланОбмена/Content.xmltests/fixtures/ПроверкаКорректностиXML/ExchangePlans/ПланОбмена/Некорректные/Content.xmltests/fixtures/ПроверкаКорректностиXML/ExchangePlans/ПланОбмена/ПланОбмена.mdotests/fixtures/ПроверкаКорректностиXML/Forms/Configurator/Form.xmltests/fixtures/ПроверкаКорректностиXML/Forms/Configurator/Некорректные/Form.xmltests/fixtures/ПроверкаКорректностиXML/Forms/EDT/Form.formtests/fixtures/ПроверкаКорректностиXML/Forms/EDT/Некорректные/Form.formtests/fixtures/ПроверкаКорректностиXML/FunctionalOptions/ФункциональнаяОпция/ФункциональнаяОпция.mdotests/fixtures/ПроверкаКорректностиXML/FunctionalOptions/ФункциональнаяОпция/ФункциональнаяОпция.xmltests/ТестПроверкаСценариевОбработки.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.ostests/ТестПроверкаСценариевОбработки.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
Добавлен новый сценарий валидации XML-файла без логики
Summary by CodeRabbit
✏️ Tip: You can customize this high-level summary in your review settings.