-
Notifications
You must be signed in to change notification settings - Fork 50
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
467 / запуск тестов из внешних обработок #471
base: develop
Are you sure you want to change the base?
Conversation
WalkthroughИзменения в проекте YAXUnit затрагивают несколько ключевых модулей, связанных с обработкой тестов, метаданных и служебных функций. Основные модификации включают обновление ссылок на модули метаданных, добавление новых функций для работы с тестовыми сценариями и рефакторинг существующих процедур обработки событий. Изменения направлены на улучшение гибкости и расширяемости системы тестирования, с особым акцентом на клиент-серверное взаимодействие и обработку метаданных. Changes
Sequence DiagramsequenceDiagram
participant TestModule as Тестовый Модуль
participant ClientServer as ЮТИсполнительСлужебныйКлиентСервер
participant EventHandler as ЮТСобытияСлужебный
TestModule->>ClientServer: Создание исполняемого теста
ClientServer-->>TestModule: Возвращает описание теста
TestModule->>EventHandler: Вызов обработчиков событий
EventHandler-->>TestModule: Выполнение предварительных и последующих действий
Poem
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
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.
SonarQube Quality Gate failed!
1 Bugs
0 Vulnerabilities
1 Code Smells
No data Coverage
0.00% Duplication
|
||
КонецФункции | ||
|
||
Функция ИсполняемыеНаборыМодуля(ТестовыйМодуль) Экспорт |
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.
🔗Уменьшите когнитивную сложность "ИсполняемыеНаборыМодуля" с 21 до 15
brainoverload
parameters
Why is this an issue?
|
||
Если ОписаниеТестовогоОбъекта.Метаданные.Тип = "ВнешняяОбработка" Тогда | ||
#Если Клиент Тогда | ||
Возврат ПолучитьФорму(СтрШаблон("ВнешняяОбработка %1.Форма", ОписаниеТестовогоОбъекта.Метаданные.Имя)); |
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.
Actionable comments posted: 3
🧹 Nitpick comments (21)
exts/yaxunit/src/CommonModules/ЮТИсполнительСлужебныйКлиентСервер/Module.bsl (9)
21-57
: Рекомендуется уделить внимание валидации параметра "ТестовыйМодуль".
Если в будущем появится необходимость вызывать функцию с невалидными объектами, лучше добавить проверку входных данных или обработку исключений для повышения надежности.
59-109
: Оптимизировать формирование тестовых наборов.
В цикле (строки 70–94) при формировании списков тестов для разных контекстов может быть полезно вынести повторяющийся код в отдельную функцию. Это улучшит читаемость и облегчит дальнейшее сопровождение.
113-117
: Описание параметра «ОписаниеТестовогоОбъекта» в комментариях.
Использование нового параметра «ОписаниеТестовогоОбъекта» вместо «ТестовыйМодуль» выглядит более наглядно, но в комментарии желательно уточнить его тип и назначение для улучшения документации.
147-147
: Лог сброса буфера ошибок.
Строка «ОписаниеТестовогоОбъекта.Ошибки.Очистить();» важна для предотвращения накопления ошибок между наборами тестов, но стоит дополнительно прокомментировать её назначение для ясности будущим разработчикам.
Line range hint
237-252
: Убедиться в согласованности настроек транзакции с окружением.
При запуске тестов на сервере или в толстом клиенте нужно гарантировать, что глобальные транзакции не конфликтуют с другими механизмами. Попробуйте дополнить документацию упоминанием об этом.
Line range hint
312-320
: Учесть особые случаи пропуска теста.
Если у теста уже есть ошибки, метод сразу возвращает. Возможно, стоит логировать пропуск для статистики.
321-321
: Проверка «Ошибка = ЮТМетодыСлужебный.ВыполнитьМетодОбъектаСПерехватомОшибки(...)».
Рекомендуется дополнительно обрабатывать ситуацию, когда метод не найден или внезапно возвращает недопустимый тип результата. Это повысит надёжность тестового движка.
343-359
: Назначение процедуры «ОбработатьОшибкиЧтенияНабора».
В текущей версии, если в наборе много ошибок чтения, процедура добавляет только один тест с ошибкой и выходит по «Прервать». При необходимости собирать все ошибки чтения может потребоваться доработка.
362-371
: Типовая логика формирования теста с ошибкой чтения.
Функция «ОписаниеТестаСОшибкойЧтения» формирует особый тест с целью отображения ошибки. При необходимости расширенного описания целесообразно ввести дополнительные поля, указывающие, какой именно тест сломан.exts/yaxunit/src/CommonModules/ЮТИсполнительСлужебныйКлиент/Module.bsl (1)
181-183
: Уместна ли дополнительная проверка перед созданием ИсполняемогоТестовогоМодуля?
При формировании «ИсполняемыхТестовыхМодулей» из исходных «ТестовыеМодули» можно проверить корректность структуры входных данных. Это поможет предупредить ошибки при выполнении тестов.exts/yaxunit/src/CommonModules/ЮТСобытияСлужебный/Module.bsl (7)
85-87
: Дополнить комментарий примером использования.
Вызов «ПередВсемиТестамиМодуля» имеет два параметра: «ТестовыйМодуль» и «ОписаниеТестовогоМодуля», что может сбивать с толку новых разработчиков. Желательно дать пример, как эти параметры применяются.
97-100
: Уточнить формат «ОписаниеТестовогоМодуля».
Документация ссылается на «ЮТФабрика.ОписаниеИсполняемогоТестовогоМодуля», но для целостности хорошо бы упомянуть его ключевые поля, чтобы повысить понимание кода.
124-128
: Добавить уточнение по контексту «ПослеКаждогоТеста».
Разработчикам пригодится комментарий о том, что событие срабатывает для каждого теста, вне зависимости от успешности его выполнения. Так легче понимать, когда происходит этот вызов.
151-153
: Документировать отличия «ПослеВсехТестовМодуля» от «ПослеТестовогоНабора».
Чтобы избежать путаницы, добавьте небольшое описание, чем именно отличается логика «ПослеВсехТестовМодуля» от более локального события «ПослеТестовогоНабора».
258-258
: Локализация сообщения об отклонённом модуле.
Строка «Загрузка модуля%1
отклонена…» — стоит убедиться, что сообщение полноценно локализовано и содержит пробел после имени модуля.
400-410
: Учесть, что «ОбработчикиСобытия» могут иметь несколько имён.
В строках 407–410 происходит разбиение строки по запятым для вызова нескольких обработчиков. Убедитесь, что нет лишних пробелов или символов-разделителей, которые могут вызвать ошибки при поиске методов.
Line range hint
416-454
: Явное логирование отсутствующего обработчика.
Если обработчик «ОбработчикСобытияПереопределен» не найден, вызывается исключение. Рассмотрите возможность ведения расширенного лога о том, в каком именно модуле не найден метод. Это ускорит отладку.exts/yaxunit/src/Configuration/Configuration.mdo (1)
102-102
: Улучшение архитектуры обработки метаданныхДобавление модуля
ЮТМетаданныеСлужебныйКлиентСервер
улучшает архитектуру системы, позволяя обрабатывать метаданные как на клиенте, так и на сервере. Это соответствует лучшим практикам разработки клиент-серверных приложений.tests/src/CommonModules/ОМ_ВыполнениеТестовОбработки/Module.bsl (3)
21-29
: Добавьте документацию к экспортной процедуреРекомендуется добавить описание назначения процедуры и параметров транзакции.
+// Процедура добавляет тестовые сценарии для выполнения тестов обработки +// +// Параметры: +// Нет Процедура ИсполняемыеСценарии() Экспорт
31-48
: Добавьте обработку исключенийРекомендуется добавить обработку возможных исключений при загрузке сценариев.
Процедура ЗагрузитьТестыОбработки() Экспорт + Попытка Сценарии = СценарииОбработки(); ЮТест.ОжидаетЧто(Сценарии) .Заполнено() .Свойство("Метаданные").Заполнено() .Свойство("Метаданные.Сервер").ЭтоИстина() .Свойство("Метаданные.КлиентУправляемоеПриложение").ЭтоЛожь() .Свойство("Метаданные.КлиентОбычноеПриложение").ЭтоЛожь() .Свойство("НаборыТестов").Заполнено() .Свойство("НаборыТестов[0].Тесты").Заполнено() .ЛюбойЭлементСодержитСвойствоСоЗначением("Имя", "ТестУспешно") .ЛюбойЭлементСодержитСвойствоСоЗначением("Имя", "ТестОшибка") .ЛюбойЭлементСодержитСвойствоСоЗначением("Имя", "ТестСломан") ; + Исключение + ВызватьИсключение НСтр("ru='Ошибка при загрузке тестов обработки: %1'", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки КонецПроцедуры
108-140
: Рассмотрите возможность параметризации тестовых сценариевТекущая реализация использует жестко закодированные тестовые процедуры. Рекомендуется:
- Вынести текст процедур в отдельный макет
- Добавить возможность параметризации тестовых сценариев
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (17)
exts/yaxunit/src/CommonModules/ЮТИсполнительСлужебныйКлиент/Module.bsl
(1 hunks)exts/yaxunit/src/CommonModules/ЮТИсполнительСлужебныйКлиентСервер/Module.bsl
(7 hunks)exts/yaxunit/src/CommonModules/ЮТЛогированиеСлужебный/Module.bsl
(1 hunks)exts/yaxunit/src/CommonModules/ЮТМетаданные/Module.bsl
(1 hunks)exts/yaxunit/src/CommonModules/ЮТМетаданныеСлужебныйВызовСервера/Module.bsl
(3 hunks)exts/yaxunit/src/CommonModules/ЮТМетаданныеСлужебныйКлиентСервер/ЮТМетаданныеСлужебныйКлиентСервер.mdo
(1 hunks)exts/yaxunit/src/CommonModules/ЮТСобытияСлужебный/Module.bsl
(7 hunks)exts/yaxunit/src/CommonModules/ЮТТестыСлужебный/Module.bsl
(1 hunks)exts/yaxunit/src/CommonModules/ЮТТипыДанныхСлужебный/Module.bsl
(1 hunks)exts/yaxunit/src/CommonModules/ЮТФабрика/Module.bsl
(2 hunks)exts/yaxunit/src/CommonModules/ЮТФабрикаСлужебный/Module.bsl
(1 hunks)exts/yaxunit/src/CommonModules/ЮТЧитательСлужебный/Module.bsl
(2 hunks)exts/yaxunit/src/Configuration/Configuration.mdo
(1 hunks)exts/yaxunit/src/Subsystems/ЮТДвижок/Subsystems/ЮТСервис/ЮТСервис.mdo
(1 hunks)tests/src/CommonModules/ОМ_ВыполнениеТестовОбработки/Module.bsl
(1 hunks)tests/src/CommonModules/ОМ_ВыполнениеТестовОбработки/ОМ_ВыполнениеТестовОбработки.mdo
(1 hunks)tests/src/Configuration/Configuration.mdo
(1 hunks)
✅ Files skipped from review due to trivial changes (2)
- tests/src/CommonModules/ОМ_ВыполнениеТестовОбработки/ОМ_ВыполнениеТестовОбработки.mdo
- exts/yaxunit/src/CommonModules/ЮТМетаданныеСлужебныйКлиентСервер/ЮТМетаданныеСлужебныйКлиентСервер.mdo
🧰 Additional context used
📓 Learnings (1)
tests/src/Configuration/Configuration.mdo (1)
Learnt from: alkoleft
PR: bia-technologies/yaxunit#413
File: exts/yaxunit/src/DataProcessors/ЮТКонструкторДвижений/ObjectModule.bsl:1-189
Timestamp: 2024-11-12T06:11:37.980Z
Learning: Тестовые модули находятся в расширении `tests` в общих модулях, которые именуются по следующей схеме:
| Тип тестируемого объекта | Префикс | Пример |
| ------------------------ | ------- | ------------------------------------------- |
| Общий модуль | `ОМ_` | ОМ_ОбщегоНазначения |
| Регистр бухгалтерии | `РБ_` | РБ_Хозрасчетный, РБ_Хозрасчетный_НЗ |
| Регистр накопления | `РН_` | РН_ОстаткиНаСкладах, РН_ОстаткиНаСкладах_ММ |
| Регистр расчета | `РР_` | РР_Зарплата, РР_Зарплата_НЗ |
| Регистр сведений | `РС_` | РС_АдресныйКлассификатор |
| Бизнес процесс | `БП_` | БП_Согласование |
| Справочник | `Спр_` | Спр_Пользователи, Спр_Пользователи_МО |
| План счетов | `ПС_` | ПС_Хозрасчетный |
| План видов расчета | `ПВР_` | ПВР_Зарплатный |
| План видов характеристик | `ПВХ_` | ПВХ_Субконто, ПВХ_Субконто_ММ |
| Документ | `Док_` | Док_ПКО |
| Перечисление | `Пер_` | Пер_СтатусСогласования |
| План обмена | `ПО_` | ПО_РИБ, ПО_РИБ_ММ |
| Задача | `Зад_` | Зад_Задача |
| Обработка | `Обр_` | Обр_ЗакрытиеМесяца, Обр_ЗакрытиеМесяца_МО |
| Отчет | `Отч_` | Отч_УниверсальныйОтчет |
🔇 Additional comments (18)
exts/yaxunit/src/CommonModules/ЮТИсполнительСлужебныйКлиентСервер/Module.bsl (4)
141-141
: Убедитесь в корректности логики завершения тестов.
После вызова «ПослеВсехТестовМодуля» могут остаться незакрытые транзакции или несохранённые данные. Проверьте, что все ресурсы освобождаются и корректно обрабатываются.
Line range hint 199-229
: Проверить корректность использования транзакций внутри тестов.
Есть риск, что при большом количестве тестов транзакция может остаться активной из-за неочевидного завершения цикла. Рекомендуется убедиться, что транзакция всегда завершается, вне зависимости от результата выполнения теста.
256-261
: Единообразная обработка «КонтекстСломан».
В ветке Иначе (строки 261–264) также вызывается «ПослеКаждогоТеста». Убедитесь, что при поломке контекста не возникает дублирующего вызова или пропуска нужной логики.
373-387
: Использование «ВнешняяОбработка» для загрузки формы.
Код (строки 379–384) предполагает разные ветви для клиента и сервера при создании внешней обработки. Проверьте, что все платформенные сценарии корректно учтены (например, тонкий клиент).
exts/yaxunit/src/CommonModules/ЮТСобытияСлужебный/Module.bsl (3)
110-114
: Проверить соответствие фактического функционала описанию.
Параметр «Тест» в процедуре «ПередКаждымТестом» может иметь отличную структуру от ожидаемой. Если это критично, следует добавить проверки для предотвращения ошибок.
138-141
: Исключительные ситуации при «ПослеТестовогоНабора».
Если набор завершается с критической ошибкой, следует ли процедуре всё равно вызываться? Уточните этот момент, так как некоторые API отрабатывают события иначе при критических сбоях.
Line range hint 278-300
: Проверьте порядок вызова серверных обработчиков событий.
Логика (строки 282–296) разделяет, вызывается ли обработка на клиенте перед обработкой модуля или после. В некоторых сценариях может потребоваться более гибкий подход к разделению «до и после».
exts/yaxunit/src/Subsystems/ЮТДвижок/Subsystems/ЮТСервис/ЮТСервис.mdo (1)
30-30
: Проверьте согласованность зависимостей после замены модуля.
Заменён «CommonModule.ЮТМетаданныеСлужебный» на «CommonModule.ЮТМетаданныеСлужебныйКлиентСервер». Убедитесь, что все вызовы старого модуля корректно перенесены в новый модуль и нигде не остались неактуальные вызовы.
exts/yaxunit/src/CommonModules/ЮТТестыСлужебный/Module.bsl (1)
208-208
: Обновлена ссылка на метод в комментарии
Изменение отражает перенос функциональности из служебного модуля в основной модуль фабрики.
exts/yaxunit/src/CommonModules/ЮТМетаданные/Module.bsl (1)
34-34
: Обновление ссылки на служебный модуль
Изменение ссылки с ЮТМетаданныеСлужебный
на ЮТМетаданныеСлужебныйКлиентСервер
для проверки описания объекта метаданных. Убедитесь, что все необходимые зависимости доступны.
✅ Verification successful
Изменение корректно реализовано
Проверка показала, что:
- Метод
ЭтоОписаниеОбъектаМетаданных
теперь определен в модулеЮТМетаданныеСлужебныйКлиентСервер
- Все вызовы метода в кодовой базе уже используют новый модуль
ЮТМетаданныеСлужебныйКлиентСервер
- Изменение согласовано во всех зависимых модулях
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверка использования модуля в других местах кода
rg "ЮТМетаданныеСлужебный\.ЭтоОписаниеОбъектаМетаданных" -A 2
Length of output: 63
Script:
#!/bin/bash
# Поиск всех использований метода ЭтоОписаниеОбъектаМетаданных
rg "ЭтоОписаниеОбъектаМетаданных" -A 2
# Поиск файлов с упоминанием модулей ЮТМетаданныеСлужебный и ЮТМетаданныеСлужебныйКлиентСервер
rg -l "ЮТМетаданныеСлужебный|ЮТМетаданныеСлужебныйКлиентСервер"
# Проверка содержимого модуля ЮТМетаданныеСлужебныйКлиентСервер
fd -e bsl "ЮТМетаданныеСлужебныйКлиентСервер" --exec cat {}
Length of output: 2850
exts/yaxunit/src/CommonModules/ЮТМетаданныеСлужебныйВызовСервера/Module.bsl (2)
147-148
: Обновление источника метаданных
Изменение источника описания метаданных с ЮТФабрикаСлужебный
на ЮТФабрика
. Добавлено явное указание типа "ОбщийМодуль".
161-172
: Добавлена новая функция для работы с метаданными обработки
Функция МетаданныеОбработки
корректно реализует получение метаданных для внешних обработок с настройкой клиент-серверного поведения.
exts/yaxunit/src/CommonModules/ЮТФабрикаСлужебный/Module.bsl (1)
483-494
: Улучшена логика определения контекстов приложения!
Изменения в функции КонтекстыПриложения
повышают читаемость кода и упрощают логику определения доступных контекстов. Использование ЮТОкружение.ОписаниеОкружения()
делает код более поддерживаемым.
tests/src/Configuration/Configuration.mdo (1)
36-36
: Корректное добавление модуля тестирования
Модуль добавлен в соответствии с принятыми соглашениями об именовании (префикс ОМ_
для тестовых модулей общих модулей).
exts/yaxunit/src/CommonModules/ЮТТипыДанныхСлужебный/Module.bsl (1)
288-288
: Корректное использование клиент-серверного модуля
Изменение соответствует архитектурному решению по использованию клиент-серверных модулей для работы с метаданными.
exts/yaxunit/src/CommonModules/ЮТЛогированиеСлужебный/Module.bsl (1)
132-132
: Корректное обновление документации.
Комментарий обновлен в соответствии с перемещением функции ОписаниеМетаданныеМодуля
из модуля ЮТФабрикаСлужебный
в модуль ЮТФабрика
.
exts/yaxunit/src/CommonModules/ЮТФабрика/Module.bsl (2)
Line range hint 425-433
: Улучшение документации метаданных модуля.
Добавлено описание нового поля Тип
, которое позволяет различать типы модулей (общий модуль или внешняя обработка). Документация четко описывает поддерживаемые значения.
436-436
: Проверьте значение по умолчанию для поля Тип
.
Значение по умолчанию установлено как "ОбщийМодуль". Убедитесь, что это не вызовет проблем при работе с внешними обработками.
✅ Verification successful
Значение по умолчанию "ОбщийМодуль" для поля Тип
корректно.
Анализ кода показывает, что:
- Поле
Тип
используется для различения типов модулей и поддерживает два значения: "ОбщийМодуль" и "ВнешняяОбработка" - В методе
ТестовыйМодуль
есть корректная обработка обоих типов - При работе с внешними обработками тип явно переопределяется в методе
МетаданныеОбработки
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Проверка использования поля Тип в коде
# Поиск использования ОписаниеМетаданныеМодуля().Тип
rg -A 5 "ОписаниеМетаданныеМодуля\(\)\.Тип"
# Поиск проверок на тип модуля
ast-grep --pattern 'if ($x = "ВнешняяОбработка") { $$$ }'
Length of output: 105
Script:
#!/bin/bash
# Поиск использования поля "Тип" в контексте описания модуля
rg -i "тип.*общиймодуль|общиймодуль.*тип" -A 5 -B 5
# Поиск всех проверок типа модуля
rg -i "тип\s*=\s*[\"'].*[\"']" -A 5 -B 5
# Поиск использования внешних обработок
rg -i "внешняяобработка|внешний\s*отчет" -A 5 -B 5
Length of output: 25779
075f578
to
091b06e
Compare
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: 16
🧹 Nitpick comments (15)
tools/local-test/scripts/test-it.sh (1)
Line range hint
41-53
: Рекомендация по улучшению управления директориямиДля улучшения поддержки кода, предлагаю объединить создание директорий и их очистку в отдельные функции.
Пример реализации:
create_directories() { local dirs=( "${LOGS_PATH}" "${DB_PATH}" "${EXPORT_PATH}" "${BINARY_PATH}" "${TMP_PATH}" "${RESULT_PATH}" ) for dir in "${dirs[@]}"; do mkdir -p "${dir}" done } cleanup_directories() { local dirs=( "${TMP_PATH:?}" "${RESULT_PATH:?}" "${LOGS_PATH:?}" ) for dir in "${dirs[@]}"; do rm -rf "${dir}"/* done }tools/local-test/scripts/steps/convert-to-xml.sh (1)
1-10
: Проверить наличие переменных окруженияСкрипт использует несколько переменных окружения ($LIB_PATH, $EXPORT_PATH, $EDT_PATH, $TMP_PATH, $ROOT_PATH, $LOGS_PATH), но не проверяет их наличие.
Рекомендую добавить проверки в начало скрипта:
+required_vars=("LIB_PATH" "EXPORT_PATH" "EDT_PATH" "TMP_PATH" "ROOT_PATH" "LOGS_PATH") +for var in "${required_vars[@]}"; do + if [[ -z "${!var}" ]]; then + echo "Ошибка: Переменная $var не установлена" + exit 1 + fi +done + PROJECT_NAME=$1 PROJECT_PATH=$2🧰 Tools
🪛 Shellcheck (0.10.0)
[error] 1-1: Tips depend on target shell and yours is unknown. Add a shebang or a 'shell' directive.
(SC2148)
tools/local-test/scripts/steps/run-filedb-test.sh (1)
10-14
: Улучшите обработку вывода логовЛогирование улучшено, но есть возможность для оптимизации:
- Нет проверки существования директории для логов
- Возможно переполнение лог-файла при многократном запуске
Предлагаю следующие изменения:
+if [ ! -d "$LOGS_PATH" ]; then + mkdir -p "$LOGS_PATH" +fi + +# Очистка старого лог-файла +> "$LOGS_PATH/$JOB_NAME.log" + echo "=========== Подготовка информационной базы ${BOLD}$JOB_NAME${RESET}" $ONEC_PATH/1cv8 CREATEINFOBASE File=$TEST_DB_PATH /DisableStartupDialogs /DisableStartupMessages /Out $LOGS_PATH/$JOB_NAME.log >> $LOGS_PATH/$JOB_NAME.log 2>&1tools/local-test/scripts/lib/print.sh (3)
9-15
: Добавьте документацию к функции print_stateФункция корректно обрабатывает статус выполнения команды, но требуется документация.
+# Выводит статус выполнения команды +# Аргументы: +# $1 - описание выполненной операции +# Возвращает: +# Ничего function print_state { if [[ $? -eq 0 ]]; then
18-34
: Добавьте проверку входных параметровФункции печати не проверяют наличие обязательного параметра сообщения.
Предлагаю добавить проверку, например для функции
print_success
:function print_success { + if [ -z "$1" ]; then + print_error "Отсутствует текст сообщения" + return 1 + fi echo -e " ${GREEN}🟢 ${RESET} $1" }Аналогичную проверку следует добавить в остальные функции печати.
1-34
: Рассмотрите возможность добавления тестовДля обеспечения надёжности библиотеки печати рекомендуется добавить модульные тесты.
Я могу помочь с написанием тестов для проверки:
- Корректности цветового оформления
- Обработки ошибочных ситуаций
- Форматирования вывода
Хотите, чтобы я создал issue для отслеживания этой задачи?
🧰 Tools
🪛 Shellcheck (0.10.0)
[error] 1-1: Tips depend on target shell and yours is unknown. Add a shebang or a 'shell' directive.
(SC2148)
[warning] 5-5: NC appears unused. Verify use (or export if used externally).
(SC2034)
tools/local-test/scripts/lib/run-tests.sh (1)
28-29
: Рассмотрите добавление временных метокДля улучшения отладки и анализа производительности рекомендуется добавить временные метки к сообщениям о начале и завершении тестирования.
Предлагаемые изменения:
-print_run "=========== Тестирование ${BOLD}$JOB_NAME${RESET}" +print_run "=========== [$(date '+%Y-%m-%d %H:%M:%S')] Тестирование ${BOLD}$JOB_NAME${RESET}" $ONEC_PATH/$APP ENTERPRISE $CONNECTION_STRING /DisableSplash /DisableStartupDialogs /DisableStartupMessages $RUN_MODE /C "RunUnitTests=$CONFIG" >> $LOGS_PATH/$JOB_NAME.log 2>&1 RESULT=$(head -n 1 $RESULT_PATH/exit-code-$JOB_NAME.txt) RESULT=${RESULT:1:1} if [[ "$RESULT" == "0" ]]; then - print_success "Тестирование ${BOLD}$JOB_NAME${RESET} завершилось успешно" + print_success "[$(date '+%Y-%m-%d %H:%M:%S')] Тестирование ${BOLD}$JOB_NAME${RESET} завершилось успешно" else - print_error "Тестирование ${BOLD}$JOB_NAME${RESET} завершилось с ошибкой" + print_error "[$(date '+%Y-%m-%d %H:%M:%S')] Тестирование ${BOLD}$JOB_NAME${RESET} завершилось с ошибкой" fiAlso applies to: 35-37
tools/local-test/scripts/lib/prepare-db.sh (2)
4-6
: Проверьте существование print.sh перед использованиемДобавьте проверку существования файла print.sh перед его подключением для предотвращения ошибок выполнения.
-. $LIB_PATH/print.sh +if [ ! -f "$LIB_PATH/print.sh" ]; then + echo "Ошибка: Файл print.sh не найден в $LIB_PATH" + exit 1 +fi +. "$LIB_PATH/print.sh"
Line range hint
1-32
: Рекомендации по улучшению скрипта в целом
- Добавьте проверку входных параметров
- Используйте константы для часто используемых значений
- Добавьте очистку временных файлов
+#!/bin/bash +set -euo pipefail + +if [ $# -ne 2 ]; then + echo "Использование: $0 <строка подключения> <имя задания>" + exit 1 +fi + CONNECTION_STRING=$1 JOB_NAME=$2 + +# Очистка при выходе +trap 'rm -f "$LOGS_PATH/$JOB_NAME.log"' EXIT🧰 Tools
🪛 Shellcheck (0.10.0)
[error] 1-1: Tips depend on target shell and yours is unknown. Add a shebang or a 'shell' directive.
(SC2148)
tools/local-test/scripts/steps/build-artifacts.sh (2)
8-11
: Рекомендуется добавить обработку ошибокПроверка наличия конфигурации выполняется корректно, но желательно добавить обработку возможных ошибок при проверке файла.
Предлагаю следующие изменения:
-if [[ -f $BINARY_PATH/configuration.cf ]]; then +if [[ -f "$BINARY_PATH/configuration.cf" ]] && [[ -r "$BINARY_PATH/configuration.cf" ]]; then configuration_exists=1 print_success " Сборка конфигурации ${BOLD}не требуется${RESET}" +else + print_state " Проверка файла конфигурации ${BOLD}не удалась${RESET}" fi
Line range hint
13-21
: Добавить валидацию расширенийТекущая реализация обработки расширений работает корректно, но рекомендуется добавить дополнительные проверки.
Предлагаю добавить проверку корректности файлов расширений:
for key in "${extensions[@]}";do + if [[ ! -d "$BINARY_PATH" ]]; then + print_state " Директория ${BOLD}$BINARY_PATH${RESET} не существует" + exit 1 + fi if [[ -f $BINARY_PATH/$key.cfe ]]; then print_success " Сборка $key ${BOLD}не требуется${RESET}" else + if [[ ! -f "$EXPORT_PATH/$key" ]]; then + print_state " Исходный файл расширения ${BOLD}$key${RESET} не найден" + continue + fi extensions_set+=($key) fi done🧰 Tools
🪛 Shellcheck (0.10.0)
[error] 1-1: Tips depend on target shell and yours is unknown. Add a shebang or a 'shell' directive.
(SC2148)
[warning] 4-4: Use "${var:?}" to ensure this never expands to /* .
(SC2115)
[warning] 19-19: Quote to prevent word splitting/globbing, or split robustly with mapfile or read -a.
(SC2206)
exts/yaxunit/src/CommonModules/ЮТФабрикаСлужебный/Module.bsl (1)
483-494
: Уточнить корректность проверки среды и добавляемых контекстов
Проверка «Если ОбычноеПриложение» может работать корректно в большинстве сценариев, но стоит убедиться, что при появлении других типов окружения (например, тонкий клиент, веб-клиент и т.д.) условие по-прежнему будет действовать корректно. Кроме того, если впоследствии понадобится учитывать дополнительные режимы, возможно, стоит вынести логику по определению контекстов в отдельную функцию или структуру для гибкости.exts/yaxunit/src/CommonModules/ЮТВнешниеОбработкиСлужебныйСервер/Module.bsl (2)
92-107
: Рекомендуется добавить очистку временных файловФункция создает временный файл с уникальным именем, но не предусматривает его удаление после использования. Рекомендуется добавить механизм очистки временных файлов.
139-146
: Рекомендуется добавить обработку ошибок при создании COM-объектаПри создании COM-объекта могут возникнуть ошибки. Рекомендуется добавить обработку исключений для более надежной работы.
#Если НЕ ВебКлиент Тогда + Попытка WshShell = Новый COMОбъект("WScript.Shell"); WshShell.CurrentDirectory = РабочийКаталог; Рез = WshShell.Run(ТекстКоманды, 0, -1); Возврат Рез; + Исключение + ВызватьИсключение "Ошибка при выполнении команды: " + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки #КонецЕслиtests/src/CommonModules/ОМ_ВыполнениеТестовОбработки/Module.bsl (1)
108-140
: Рекомендуется добавить документацию к тестовым процедурамДля улучшения поддержки кода рекомендуется добавить описание назначения каждой тестовой процедуры и ожидаемых результатов.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
exts/yaxunit/src/CommonTemplates/ЮТV8UnpackWS/Template.bin
is excluded by!**/*.bin
📒 Files selected for processing (34)
exts/yaxunit/src/CommonModules/ЮТВнешниеОбработкиСлужебныйСервер/Module.bsl
(3 hunks)exts/yaxunit/src/CommonModules/ЮТИсполнительСлужебныйКлиент/Module.bsl
(1 hunks)exts/yaxunit/src/CommonModules/ЮТИсполнительСлужебныйКлиентСервер/Module.bsl
(7 hunks)exts/yaxunit/src/CommonModules/ЮТЛогированиеСлужебный/Module.bsl
(1 hunks)exts/yaxunit/src/CommonModules/ЮТМетаданные/Module.bsl
(1 hunks)exts/yaxunit/src/CommonModules/ЮТМетаданныеСлужебныйВызовСервера/Module.bsl
(3 hunks)exts/yaxunit/src/CommonModules/ЮТМетаданныеСлужебныйКлиентСервер/ЮТМетаданныеСлужебныйКлиентСервер.mdo
(1 hunks)exts/yaxunit/src/CommonModules/ЮТСобытияСлужебный/Module.bsl
(7 hunks)exts/yaxunit/src/CommonModules/ЮТТестыСлужебный/Module.bsl
(1 hunks)exts/yaxunit/src/CommonModules/ЮТТипыДанныхСлужебный/Module.bsl
(1 hunks)exts/yaxunit/src/CommonModules/ЮТФабрика/Module.bsl
(2 hunks)exts/yaxunit/src/CommonModules/ЮТФабрикаСлужебный/Module.bsl
(1 hunks)exts/yaxunit/src/CommonModules/ЮТЧитательСлужебный/Module.bsl
(2 hunks)exts/yaxunit/src/Configuration/Configuration.mdo
(1 hunks)exts/yaxunit/src/Subsystems/ЮТДвижок/Subsystems/ЮТСервис/ЮТСервис.mdo
(1 hunks)tests/src/CommonModules/ОМ_ВыполнениеТестовОбработки/Module.bsl
(1 hunks)tests/src/CommonModules/ОМ_ВыполнениеТестовОбработки/ОМ_ВыполнениеТестовОбработки.mdo
(1 hunks)tests/src/CommonModules/ОМ_ЮТТесты/Module.bsl
(1 hunks)tests/src/CommonModules/ОМ_ЮТТипыДанныхСлужебный/Module.bsl
(1 hunks)tests/src/CommonModules/ОМ_ЮТФильтрацияСлужебный/Module.bsl
(1 hunks)tests/src/CommonModules/ОМ_ЮТЧитательСлужебный/Module.bsl
(2 hunks)tests/src/CommonModules/ТестовыеДанные/Module.bsl
(1 hunks)tests/src/Configuration/Configuration.mdo
(1 hunks)tools/local-test/scripts/lib/prepare-db.sh
(1 hunks)tools/local-test/scripts/lib/print.sh
(1 hunks)tools/local-test/scripts/lib/run-tests.sh
(1 hunks)tools/local-test/scripts/steps/build-artifacts.sh
(2 hunks)tools/local-test/scripts/steps/clean-outdated.sh
(1 hunks)tools/local-test/scripts/steps/convert-to-xml.sh
(1 hunks)tools/local-test/scripts/steps/run-filedb-test.sh
(1 hunks)tools/local-test/scripts/steps/run-serverdb-test.sh
(1 hunks)tools/local-test/scripts/test-it.sh
(2 hunks)tools/v8unpack/build-epf.bat
(1 hunks)tools/v8unpack/build-epf.sh
(1 hunks)
✅ Files skipped from review due to trivial changes (1)
- tools/v8unpack/build-epf.bat
🚧 Files skipped from review as they are similar to previous changes (10)
- tests/src/CommonModules/ОМ_ВыполнениеТестовОбработки/ОМ_ВыполнениеТестовОбработки.mdo
- exts/yaxunit/src/Configuration/Configuration.mdo
- tests/src/Configuration/Configuration.mdo
- exts/yaxunit/src/CommonModules/ЮТМетаданныеСлужебныйКлиентСервер/ЮТМетаданныеСлужебныйКлиентСервер.mdo
- exts/yaxunit/src/Subsystems/ЮТДвижок/Subsystems/ЮТСервис/ЮТСервис.mdo
- exts/yaxunit/src/CommonModules/ЮТМетаданные/Module.bsl
- exts/yaxunit/src/CommonModules/ЮТТипыДанныхСлужебный/Module.bsl
- exts/yaxunit/src/CommonModules/ЮТЛогированиеСлужебный/Module.bsl
- exts/yaxunit/src/CommonModules/ЮТЧитательСлужебный/Module.bsl
- exts/yaxunit/src/CommonModules/ЮТТестыСлужебный/Module.bsl
🧰 Additional context used
🪛 Shellcheck (0.10.0)
tools/local-test/scripts/steps/run-serverdb-test.sh
[warning] 18-18: Quotes/backslashes in this variable will not be respected.
(SC2090)
[warning] 20-20: Quotes/backslashes in this variable will not be respected.
(SC2090)
tools/local-test/scripts/test-it.sh
[warning] 53-53: Use "${var:?}" to ensure this never expands to /* .
(SC2115)
tools/local-test/scripts/steps/clean-outdated.sh
[warning] 19-19: Use "${var:?}" to ensure this never expands to / .
(SC2115)
tools/local-test/scripts/steps/build-artifacts.sh
[warning] 4-4: Use "${var:?}" to ensure this never expands to /* .
(SC2115)
tools/local-test/scripts/lib/print.sh
[error] 1-1: Tips depend on target shell and yours is unknown. Add a shebang or a 'shell' directive.
(SC2148)
[warning] 5-5: NC appears unused. Verify use (or export if used externally).
(SC2034)
🔇 Additional comments (25)
tools/local-test/scripts/steps/clean-outdated.sh (1)
18-18
: Улучшенное форматирование сообщений
Изменения в форматировании сообщений улучшают читаемость вывода скрипта. Использование переменных ${BOLD}
и ${RESET}
делает статус более заметным.
Also applies to: 21-21, 23-23
tools/local-test/scripts/steps/run-serverdb-test.sh (1)
6-7
: Подключение библиотеки print.sh выполнено корректно
Корректное использование source для подключения функций логирования.
tools/local-test/scripts/test-it.sh (1)
41-43
: Структура логирования реализована корректно
Добавление централизованного пути для логов и создание соответствующей директории следует общему паттерну скрипта и улучшает организацию выходных данных.
tools/local-test/scripts/steps/convert-to-xml.sh (2)
4-4
: Подтверждаю добавление библиотеки печати
Добавление библиотеки print.sh улучшает согласованность вывода логов в системе.
7-7
: Улучшение форматирования вывода
Замена прямых echo на функции print_info и print_run улучшает читаемость и унифицирует вывод логов.
Also applies to: 9-9
tools/local-test/scripts/steps/run-filedb-test.sh (1)
6-7
: Проверьте наличие файла print.sh
Добавлена зависимость от файла print.sh. Убедитесь, что файл существует в указанном пути.
✅ Verification successful
Файл print.sh найден и содержит все необходимые функции
Файл print.sh
существует по пути tools/local-test/scripts/lib/print.sh
и содержит все требуемые функции для вывода сообщений:
print_state
- для вывода состоянияprint_error
- для вывода ошибокprint_info
- для вывода информационных сообщений
Импорт файла корректен и безопасен для использования.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Check if print.sh exists and contains required functions
# Check if print.sh exists
if [ -f "$LIB_PATH/print.sh" ]; then
# Check for required functions
grep -E "print_(state|error|info)" "$LIB_PATH/print.sh"
fi
Length of output: 22
Script:
#!/bin/bash
# Search for print.sh file in the repository
fd "print.sh" --type f
# If found, check its content
fd "print.sh" --type f --exec cat {}
Length of output: 785
tools/v8unpack/build-epf.sh (1)
Line range hint 1-5
: Проверьте использование скрипта в CI/CD
Убедитесь, что все места вызова скрипта обновлены с учетом нового параметра.
tools/local-test/scripts/lib/run-tests.sh (2)
28-28
: Улучшение читаемости вывода с помощью форматирования
Хорошее улучшение с использованием выделения жирным шрифтом для названия задачи. Это повышает читаемость вывода при параллельном выполнении нескольких тестов.
Also applies to: 35-35, 37-37
29-29
: Проверьте ротацию лог-файлов
Перенаправление вывода в лог-файл - правильное решение, но стоит учесть:
- Возможное переполнение директории логов при частом запуске тестов
- Отсутствие механизма очистки старых логов
Рекомендуется добавить механизм очистки старых лог-файлов, например:
- Удаление логов старше N дней
- Ограничение максимального размера директории с логами
tools/local-test/scripts/lib/prepare-db.sh (1)
26-28
: Проверьте наличие файла DisableSafeMode.epf
Добавьте проверку существования файла DisableSafeMode.epf перед его выполнением.
+if [ ! -f "$LIB_PATH/DisableSafeMode.epf" ]; then
+ print_state "Ошибка: Файл DisableSafeMode.epf не найден в ${BOLD}$LIB_PATH${RESET}"
+ exit 1
+fi
$ONEC_PATH/1cv8 ENTERPRISE $BASE_ARGUMENTS /Execute $LIB_PATH/DisableSafeMode.epf >> $LOGS_PATH/$JOB_NAME.log 2>&1
SUCCESS=$?
+if [ $SUCCESS -ne 0 ]; then
+ print_state "Ошибка при снятии безопасного режима в ${BOLD}$JOB_NAME${RESET}"
+ exit $SUCCESS
+fi
print_state "Снятие безопасного режима ${BOLD}$JOB_NAME${RESET}"
✅ Verification successful
Файл DisableSafeMode.epf существует в нужной директории
Файл DisableSafeMode.epf
присутствует в директории tools/local-test/scripts/lib/
, которая соответствует переменной $LIB_PATH
в скрипте. Тем не менее, добавление проверки существования файла и обработки ошибок, как предложено в review comment, является хорошей практикой для повышения надежности скрипта.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверка наличия файла DisableSafeMode.epf
fd -t f "DisableSafeMode.epf" --exec file {}
Length of output: 82
Script:
#!/bin/bash
# Попробуем найти файл DisableSafeMode.epf без использования команды file
fd -t f "DisableSafeMode.epf"
# Также проверим с помощью find для надежности
find . -name "DisableSafeMode.epf" -type f
Length of output: 172
tests/src/CommonModules/ТестовыеДанные/Module.bsl (1)
38-38
: Убедиться в правильном вызове новой функции получения метаданных
Переход с «ЮТФабрикаСлужебный.ОписаниеМетаданныеМодуля()» на «ЮТФабрика.ОписаниеМетаданныеМодуля()» может влиять на контекст возвращаемых данных. Рекомендуется проверить, не изменился ли при этом формат самой структуры метаданных и корректно ли она используется при последующих операциях.
tests/src/CommonModules/ОМ_ЮТТипыДанныхСлужебный/Module.bsl (1)
117-117
: Проверить корректность переноса вызова «ОписаниеТиповЛюбаяСсылка»
Замена вызова «ЮТОбщий.ОписаниеТиповЛюбаяСсылка()» на «ЮТТипыДанныхСлужебный.ОписаниеТиповЛюбаяСсылка()» должна сохранять совместимость с предыдущей логикой. Убедитесь, что новый модуль возвращает ожидаемый набор типов, особенно при работе со ссылками на объекты метаданных.
tests/src/CommonModules/ОМ_ЮТТесты/Module.bsl (1)
34-34
: Проверить использование «ОписаниеМетаданныеМодуля» в тестах
Изменение ссылки на «ЮТФабрика.ОписаниеМетаданныеМодуля()» предполагает новую точку получения данных о метаданных. Убедитесь, что тесты корректно инициализируются и что свойства метаданных (КлиентУправляемоеПриложение, КлиентОбычноеПриложение, Сервер) действительно соответствуют реальным условиям тестируемой среды.
exts/yaxunit/src/CommonModules/ЮТВнешниеОбработкиСлужебныйСервер/Module.bsl (1)
52-54
: Корректное использование возвращаемого значения функции
Правильное изменение: теперь имя файла явно возвращается из функции СобратьОбработку
и используется в вызывающем коде.
tests/src/CommonModules/ОМ_ВыполнениеТестовОбработки/Module.bsl (1)
21-91
: Корректная структура тестовых сценариев
Тесты хорошо структурированы, включают проверку различных статусов выполнения (успешно, ошибка, сломан) и корректно используют утверждения.
tests/src/CommonModules/ОМ_ЮТЧитательСлужебный/Module.bsl (2)
152-152
: Проверить согласованность использования ЮТФабрика
Изменен источник метаданных с ЮТФабрикаСлужебный
на ЮТФабрика
. Необходимо проверить согласованность этого изменения во всей кодовой базе.
✅ Verification successful
Let me generate one more verification to check for any remaining references to the old factory:
Let's check the specific usage context in the files where we found references:
Изменение согласовано с кодовой базой
Анализ показал, что метод ОписаниеМетаданныеМодуля()
теперь последовательно используется через ЮТФабрика
во всей кодовой базе. Старых вызовов через ЮТФабрикаСлужебный
не обнаружено. Хотя модуль ЮТФабрикаСлужебный
все еще существует, он используется для других целей (создание описаний тестов, ошибок и т.д.).
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск использования старого и нового способа получения метаданных
echo "Старый способ:"
rg "ЮТФабрикаСлужебный\.ОписаниеМетаданныеМодуля"
echo "Новый способ:"
rg "ЮТФабрика\.ОписаниеМетаданныеМодуля"
Length of output: 1830
Script:
#!/bin/bash
# Поиск любых упоминаний ЮТФабрикаСлужебный
rg "ЮТФабрикаСлужебный" -l
# Поиск определения модуля ЮТФабрикаСлужебный
fd "ЮТФабрикаСлужебный"
Length of output: 2877
Script:
#!/bin/bash
# Проверяем контекст использования ЮТФабрикаСлужебный в файлах
rg "ЮТФабрикаСлужебный" -B 2 -A 2 tests/src/CommonModules/ОМ_ЮТЧитательСлужебный/Module.bsl
rg "ЮТФабрикаСлужебный" -B 2 -A 2 tests/src/CommonModules/ОМ_ЮТФильтрацияСлужебный/Module.bsl
rg "ЮТФабрикаСлужебный" -B 2 -A 2 tests/src/CommonModules/ОМ_ЮТИсполнительСлужебныйКлиент/Module.bsl
Length of output: 2433
93-93
: Необходимо подтвердить изменение количества тестов
Количество ожидаемых тестов увеличено с 41 до 42. Пожалуйста, подтвердите, что это изменение соответствует фактическому добавлению нового теста.
✅ Verification successful
Let's gather more specific information about the test procedures in the module under review.
Let's check the actual test methods in this module to verify the count.
Let's try to get the full content of the module to analyze all test methods, as they might have a different naming pattern.
Изменение количества тестов подтверждено
В процедуре ЗагрузитьТесты()
проверяется количество прочитанных наборов тестов из расширения tests:
Наборы = ЮТЧитательСлужебный.ЗагрузитьТесты(ПараметрыЗапуска);
ЮТест.ОжидаетЧто(Наборы, "Прочитанные наборы расширения tests")
.ИмеетДлину(42);
Изменение с 41 на 42 теста является корректным, так как это отражает фактическое количество тестовых наборов в расширении tests.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверка количества тестовых процедур
rg -l "Процедура\s+.*\(\s*\)\s+Экспорт" tests/
Length of output: 2722
Script:
#!/bin/bash
# Поиск экспортных процедур в модуле ОМ_ЮТЧитательСлужебный
rg "Процедура\s+.*\(\s*\)\s+Экспорт" tests/src/CommonModules/ОМ_ЮТЧитательСлужебный/Module.bsl
Length of output: 430
Script:
#!/bin/bash
# Поиск тестовых методов в модуле
rg "Процедура\s+Тест.*\(\s*\)" tests/src/CommonModules/ОМ_ЮТЧитательСлужебный/Module.bsl
Length of output: 240
Script:
#!/bin/bash
# Получение содержимого модуля
cat tests/src/CommonModules/ОМ_ЮТЧитательСлужебный/Module.bsl
Length of output: 7353
exts/yaxunit/src/CommonModules/ЮТИсполнительСлужебныйКлиентСервер/Module.bsl (1)
21-57
: Функция корректно обрабатывает контексты исполнения тестов.
Функция ИсполняемыйТестовыйМодуль
правильно проверяет доступность контекстов исполнения и корректно обрабатывает ошибки режимов выполнения.
tests/src/CommonModules/ОМ_ЮТФильтрацияСлужебный/Module.bsl (1)
Line range hint 375-379
: Корректное изменение источника метаданных.
Переход с ЮТФабрикаСлужебный
на ЮТФабрика
для получения описания метаданных модуля является правильным архитектурным решением.
exts/yaxunit/src/CommonModules/ЮТМетаданныеСлужебныйВызовСервера/Module.bsl (2)
147-148
: Улучшение типизации метаданных модуля.
Добавление явного указания типа "ОбщийМодуль" улучшает типизацию и облегчает дальнейшую обработку метаданных.
161-172
: Добавлена поддержка метаданных внешних обработок.
Новая функция МетаданныеОбработки
корректно реализует получение метаданных для внешних обработок.
✅ Verification successful
Функция МетаданныеОбработки корректно используется в тестах
Функция МетаданныеОбработки
уже интегрирована в тестовый код и используется в модуле ОМ_ВыполнениеТестовОбработки
для получения метаданных внешней обработки в контексте серверного вызова. Реализация соответствует требованиям и подтверждена тестовым покрытием.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверка использования новой функции в тестах
# Поиск тестов для внешних обработок
rg -l "МетаданныеОбработки" tests/
Length of output: 234
Script:
#!/bin/bash
# Проверим содержимое файла с тестами, чтобы увидеть как используется функция
rg -A 5 -B 5 "МетаданныеОбработки" tests/src/CommonModules/ОМ_ВыполнениеТестовОбработки/Module.bsl
Length of output: 837
exts/yaxunit/src/CommonModules/ЮТИсполнительСлужебныйКлиент/Module.bsl (1)
184-184
: Улучшение архитектуры: перенос логики в общий модуль
Перенос создания исполняемого тестового модуля в общий клиент-серверный модуль - это правильное архитектурное решение, которое улучшает организацию кода и его поддерживаемость.
exts/yaxunit/src/CommonModules/ЮТСобытияСлужебный/Module.bsl (2)
85-90
: Улучшение согласованности интерфейса обработчиков событий
Добавление параметра ТестовыйМодуль
во все обработчики событий улучшает:
- Типобезопасность за счет явной передачи тестового модуля
- Читаемость кода за счет явного указания зависимостей
- Поддерживаемость за счет стандартизации интерфейса
Also applies to: 97-103, 110-117, 124-131, 138-144, 151-156
Line range hint 278-296
: Улучшение механизма обработки событий
Доработка процедуры ВызватьОбработкуСобытияИсполненияТестов
улучшает:
- Поддержку обработчиков событий уровня тестового модуля
- Порядок выполнения обработчиков
- Обработку ошибок
Also applies to: 300-300
exts/yaxunit/src/CommonModules/ЮТФабрика/Module.bsl (1)
Line range hint 425-436
: Улучшение структуры метаданных модуля
Добавление поля Тип
в описание метаданных модуля улучшает:
- Типобезопасность за счет явного указания типа модуля
- Документацию за счет четкого указания поддерживаемых значений
- Расширяемость для будущих типов модулей
rm -rf $EXPORT_PATH/$PROJECT_NAME | ||
rm -rf $BINARY_PATH/$PROJECT_NAME.* |
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.
Необходимо обеспечить безопасное использование rm
Текущая реализация команды rm может быть небезопасной, если переменные $EXPORT_PATH
или $PROJECT_NAME
окажутся пустыми или неопределенными.
Предлагаю следующие изменения для повышения безопасности:
- rm -rf $EXPORT_PATH/$PROJECT_NAME
- rm -rf $BINARY_PATH/$PROJECT_NAME.*
+ rm -rf "${EXPORT_PATH:?}/${PROJECT_NAME:?}"
+ rm -rf "${BINARY_PATH:?}/${PROJECT_NAME:?}."*
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
rm -rf $EXPORT_PATH/$PROJECT_NAME | |
rm -rf $BINARY_PATH/$PROJECT_NAME.* | |
rm -rf "${EXPORT_PATH:?}/${PROJECT_NAME:?}" | |
rm -rf "${BINARY_PATH:?}/${PROJECT_NAME:?}."* |
🧰 Tools
🪛 Shellcheck (0.10.0)
[warning] 19-19: Use "${var:?}" to ensure this never expands to / .
(SC2115)
if $LIB_PATH/prepare-db.sh $CONNECTION_STRING $JOB_NAME; then | ||
print_info "Подготовлена база для ${BOLD}$JOB_NAME${RESET}" | ||
$LIB_PATH/run-tests.sh $MODE $CONNECTION_STRING $JOB_NAME | ||
else | ||
print_error "Не удалось создать базу для ${BOLD}$JOB_NAME${RESET}" |
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.
Необходимо исправить обработку переменной CONNECTION_STRING
Текущая реализация может некорректно обрабатывать кавычки и обратные слеши в строке подключения.
Предлагаю следующие изменения:
-if $LIB_PATH/prepare-db.sh $CONNECTION_STRING $JOB_NAME; then
+if $LIB_PATH/prepare-db.sh "$CONNECTION_STRING" "$JOB_NAME"; then
print_info "Подготовлена база для ${BOLD}$JOB_NAME${RESET}"
- $LIB_PATH/run-tests.sh $MODE $CONNECTION_STRING $JOB_NAME
+ $LIB_PATH/run-tests.sh "$MODE" "$CONNECTION_STRING" "$JOB_NAME"
Также рекомендуется в начале скрипта добавить:
set -euo pipefail
Это обеспечит более строгую обработку ошибок и защиту от использования неопределённых переменных.
🧰 Tools
🪛 Shellcheck (0.10.0)
[warning] 18-18: Quotes/backslashes in this variable will not be respected.
(SC2090)
[warning] 20-20: Quotes/backslashes in this variable will not be respected.
(SC2090)
echo "=========== Подготовка информационной базы ${BOLD}$JOB_NAME${RESET}" | ||
$ONEC_PATH/1cv8 CREATEINFOBASE Srvr=localhost\;Ref=$DB_NAME\;DBMS=PostgreSQL\;DBSrvr=localhost\;DB=$DB_NAME\;DBUID=postgres\;CrSQLDB=Y\;SchJobDn=Y /DisableStartupDialogs /DisableStartupMessages /Out $LOGS_PATH/$JOB_NAME.log >> $LOGS_PATH/$JOB_NAME.log 2>&1 | ||
SUCCESS=$? | ||
print_state "Создание информационной базы ${BOLD}$JOB_NAME${RESET}" | ||
|
||
if [ $SUCCESS -ne 0 ]; then | ||
print_error "Не удалось создать базу ${BOLD}$JOB_NAME${RESET}" | ||
exit 0 | ||
fi |
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.
🛠️ Refactor suggestion
Улучшена обработка ошибок при создании базы данных
Добавлена проверка успешности выполнения команды CREATEINFOBASE и корректное логирование результата. Однако, код возврата exit 0
при ошибке может ввести в заблуждение системы CI/CD.
Предлагаю изменить:
- exit 0
+ exit 1
Это позволит системам CI/CD корректно определять неудачное выполнение скрипта.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
echo "=========== Подготовка информационной базы ${BOLD}$JOB_NAME${RESET}" | |
$ONEC_PATH/1cv8 CREATEINFOBASE Srvr=localhost\;Ref=$DB_NAME\;DBMS=PostgreSQL\;DBSrvr=localhost\;DB=$DB_NAME\;DBUID=postgres\;CrSQLDB=Y\;SchJobDn=Y /DisableStartupDialogs /DisableStartupMessages /Out $LOGS_PATH/$JOB_NAME.log >> $LOGS_PATH/$JOB_NAME.log 2>&1 | |
SUCCESS=$? | |
print_state "Создание информационной базы ${BOLD}$JOB_NAME${RESET}" | |
if [ $SUCCESS -ne 0 ]; then | |
print_error "Не удалось создать базу ${BOLD}$JOB_NAME${RESET}" | |
exit 0 | |
fi | |
echo "=========== Подготовка информационной базы ${BOLD}$JOB_NAME${RESET}" | |
$ONEC_PATH/1cv8 CREATEINFOBASE Srvr=localhost\;Ref=$DB_NAME\;DBMS=PostgreSQL\;DBSrvr=localhost\;DB=$DB_NAME\;DBUID=postgres\;CrSQLDB=Y\;SchJobDn=Y /DisableStartupDialogs /DisableStartupMessages /Out $LOGS_PATH/$JOB_NAME.log >> $LOGS_PATH/$JOB_NAME.log 2>&1 | |
SUCCESS=$? | |
print_state "Создание информационной базы ${BOLD}$JOB_NAME${RESET}" | |
if [ $SUCCESS -ne 0 ]; then | |
print_error "Не удалось создать базу ${BOLD}$JOB_NAME${RESET}" | |
exit 1 | |
fi |
@@ -48,6 +50,7 @@ mkdir -p $RESULT_PATH | |||
|
|||
rm -rf $TMP_PATH/* | |||
rm -rf $RESULT_PATH/* | |||
rm -rf $LOGS_PATH/* |
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.
Необходимо добавить проверку безопасности при очистке директории логов
Текущая реализация может быть небезопасной, если переменная $LOGS_PATH
окажется пустой.
Предлагаю следующее исправление:
-rm -rf $LOGS_PATH/*
+rm -rf "${LOGS_PATH:?}"/*
Это добавит проверку на пустое значение переменной и предотвратит потенциально опасное выполнение команды rm -rf /*
.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
rm -rf $LOGS_PATH/* | |
rm -rf "${LOGS_PATH:?}"/* |
🧰 Tools
🪛 Shellcheck (0.10.0)
[warning] 53-53: Use "${var:?}" to ensure this never expands to /* .
(SC2115)
echo " Конвертация $PROJECT_NAME" | ||
$EDT_PATH/1cedtcli -data $TMP_PATH/ws -timeout 300 -command export --configuration-files $EXPORT_PATH/$PROJECT_NAME --project $ROOT_PATH/$PROJECT_PATH | ||
print_run "Конвертация ${BOLD}$PROJECT_NAME${RESET}" | ||
$EDT_PATH/1cedtcli -data $TMP_PATH/ws -timeout 300 -v -command export --configuration-files $EXPORT_PATH/$PROJECT_NAME --project $ROOT_PATH/$PROJECT_PATH > $LOGS_PATH/$PROJECT_NAME.log 2>&1 |
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.
🛠️ Refactor suggestion
Рекомендации по обработке ошибок
Хотя перенаправление вывода в лог файл реализовано корректно, рекомендуется добавить проверку кода возврата команды 1cedtcli.
Предлагаю следующие изменения:
- $EDT_PATH/1cedtcli -data $TMP_PATH/ws -timeout 300 -v -command export --configuration-files $EXPORT_PATH/$PROJECT_NAME --project $ROOT_PATH/$PROJECT_PATH > $LOGS_PATH/$PROJECT_NAME.log 2>&1
+ if ! $EDT_PATH/1cedtcli -data $TMP_PATH/ws -timeout 300 -v -command export --configuration-files $EXPORT_PATH/$PROJECT_NAME --project $ROOT_PATH/$PROJECT_PATH > $LOGS_PATH/$PROJECT_NAME.log 2>&1; then
+ print_error "Ошибка конвертации проекта ${BOLD}$PROJECT_NAME${RESET}"
+ exit 1
+ fi
Committable suggestion skipped: line range outside the PR's diff.
$DESIGNER_COMMAND /LoadCfg $BINARY_PATH/configuration.cf /UpdateDBCfg >> $LOGS_PATH/$JOB_NAME.log 2>&1 | ||
SUCCESS=$? | ||
print_state "Загрузка конфигурации в ${BOLD}$JOB_NAME${RESET}" |
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.
🛠️ Refactor suggestion
Добавьте обработку ошибок загрузки конфигурации
Текущая реализация не предоставляет детальной информации в случае ошибки загрузки конфигурации.
$DESIGNER_COMMAND /LoadCfg $BINARY_PATH/configuration.cf /UpdateDBCfg >> $LOGS_PATH/$JOB_NAME.log 2>&1
SUCCESS=$?
+if [ $SUCCESS -ne 0 ]; then
+ print_state "Ошибка загрузки конфигурации в ${BOLD}$JOB_NAME${RESET}"
+ exit $SUCCESS
+fi
print_state "Загрузка конфигурации в ${BOLD}$JOB_NAME${RESET}"
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
$DESIGNER_COMMAND /LoadCfg $BINARY_PATH/configuration.cf /UpdateDBCfg >> $LOGS_PATH/$JOB_NAME.log 2>&1 | |
SUCCESS=$? | |
print_state "Загрузка конфигурации в ${BOLD}$JOB_NAME${RESET}" | |
$DESIGNER_COMMAND /LoadCfg $BINARY_PATH/configuration.cf /UpdateDBCfg >> $LOGS_PATH/$JOB_NAME.log 2>&1 | |
SUCCESS=$? | |
if [ $SUCCESS -ne 0 ]; then | |
print_state "Ошибка загрузки конфигурации в ${BOLD}$JOB_NAME${RESET}" | |
exit $SUCCESS | |
fi | |
print_state "Загрузка конфигурации в ${BOLD}$JOB_NAME${RESET}" |
TEMP_DB_PATH=$TMP_PATH/file-db | ||
. $LIB_PATH/print.sh | ||
|
||
rm -rf $TEMP_DB_PATH/* |
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.
Необходимо обезопасить операцию удаления
Текущая реализация команды rm -rf $TEMP_DB_PATH/*
может быть небезопасной, если переменная TEMP_DB_PATH
окажется пустой.
Предлагаю следующие изменения:
-rm -rf $TEMP_DB_PATH/*
+[[ -n "${TEMP_DB_PATH}" ]] && rm -rf "${TEMP_DB_PATH:?}/"*
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
TEMP_DB_PATH=$TMP_PATH/file-db | |
. $LIB_PATH/print.sh | |
rm -rf $TEMP_DB_PATH/* | |
TEMP_DB_PATH=$TMP_PATH/file-db | |
. $LIB_PATH/print.sh | |
[[ -n "${TEMP_DB_PATH}" ]] && rm -rf "${TEMP_DB_PATH:?}/"* |
🧰 Tools
🪛 Shellcheck (0.10.0)
[error] 1-1: Tips depend on target shell and yours is unknown. Add a shebang or a 'shell' directive.
(SC2148)
[warning] 4-4: Use "${var:?}" to ensure this never expands to /* .
(SC2115)
print_run "Сборка артефактов" | ||
|
||
$ONEC_PATH/ibcmd infobase create --db-path=$TEMP_DB_PATH --import=$EXPORT_PATH/configuration --apply --force >> $LOGS_PATH/configuration.log 2>&1 | ||
print_state 'Создание информационной базы' | ||
|
||
if [[ $configuration_exists -eq 0 ]]; then | ||
echo " Сохрание тестовой конфигурации" | ||
$ONEC_PATH/ibcmd infobase config save --db-path=$TEMP_DB_PATH $BINARY_PATH/configuration.cf > /dev/null | ||
$ONEC_PATH/ibcmd infobase config save --db-path=$TEMP_DB_PATH $BINARY_PATH/configuration.cf >> $LOGS_PATH/configuration.log 2>&1 | ||
print_state 'Сохрание тестовой конфигурации' | ||
fi | ||
|
||
for key in "${extensions_set[@]}";do | ||
echo " Импорт расширения $key" | ||
$ONEC_PATH/ibcmd infobase config import --db-path=$TEMP_DB_PATH --extension=$key $EXPORT_PATH/$key > /dev/null | ||
echo " Сохрание расширения $key" | ||
$ONEC_PATH/ibcmd infobase config save --db-path=$TEMP_DB_PATH --extension=$key $BINARY_PATH/$key.cfe > /dev/null | ||
$ONEC_PATH/ibcmd infobase config import --db-path=$TEMP_DB_PATH --extension=$key $EXPORT_PATH/$key >> $LOGS_PATH/$key.log 2>&1 | ||
print_state "Импорт расширения ${BOLD}$key${RESET}" | ||
|
||
$ONEC_PATH/ibcmd infobase config save --db-path=$TEMP_DB_PATH --extension=$key $BINARY_PATH/$key.cfe >> $LOGS_PATH/$key.log 2>&1 | ||
print_state "Сохрание расширения ${BOLD}$key${RESET}" |
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.
🛠️ Refactor suggestion
Добавить проверку результатов выполнения команд
Рекомендуется добавить проверку кодов возврата после выполнения команд ibcmd для корректной обработки ошибок.
Предлагаю следующие изменения:
print_run "Сборка артефактов"
-$ONEC_PATH/ibcmd infobase create --db-path=$TEMP_DB_PATH --import=$EXPORT_PATH/configuration --apply --force >> $LOGS_PATH/configuration.log 2>&1
+if ! $ONEC_PATH/ibcmd infobase create --db-path=$TEMP_DB_PATH --import=$EXPORT_PATH/configuration --apply --force >> $LOGS_PATH/configuration.log 2>&1; then
+ print_state "Ошибка создания информационной базы"
+ exit 1
+fi
print_state 'Создание информационной базы'
if [[ $configuration_exists -eq 0 ]]; then
- $ONEC_PATH/ibcmd infobase config save --db-path=$TEMP_DB_PATH $BINARY_PATH/configuration.cf >> $LOGS_PATH/configuration.log 2>&1
+ if ! $ONEC_PATH/ibcmd infobase config save --db-path=$TEMP_DB_PATH $BINARY_PATH/configuration.cf >> $LOGS_PATH/configuration.log 2>&1; then
+ print_state "Ошибка сохранения конфигурации"
+ exit 1
+ fi
print_state 'Сохрание тестовой конфигурации'
fi
for key in "${extensions_set[@]}";do
- $ONEC_PATH/ibcmd infobase config import --db-path=$TEMP_DB_PATH --extension=$key $EXPORT_PATH/$key >> $LOGS_PATH/$key.log 2>&1
+ if ! $ONEC_PATH/ibcmd infobase config import --db-path=$TEMP_DB_PATH --extension=$key $EXPORT_PATH/$key >> $LOGS_PATH/$key.log 2>&1; then
+ print_state "Ошибка импорта расширения ${BOLD}$key${RESET}"
+ continue
+ fi
print_state "Импорт расширения ${BOLD}$key${RESET}"
- $ONEC_PATH/ibcmd infobase config save --db-path=$TEMP_DB_PATH --extension=$key $BINARY_PATH/$key.cfe >> $LOGS_PATH/$key.log 2>&1
+ if ! $ONEC_PATH/ibcmd infobase config save --db-path=$TEMP_DB_PATH --extension=$key $BINARY_PATH/$key.cfe >> $LOGS_PATH/$key.log 2>&1; then
+ print_state "Ошибка сохранения расширения ${BOLD}$key${RESET}"
+ continue
+ fi
print_state "Сохрание расширения ${BOLD}$key${RESET}"
done
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
print_run "Сборка артефактов" | |
$ONEC_PATH/ibcmd infobase create --db-path=$TEMP_DB_PATH --import=$EXPORT_PATH/configuration --apply --force >> $LOGS_PATH/configuration.log 2>&1 | |
print_state 'Создание информационной базы' | |
if [[ $configuration_exists -eq 0 ]]; then | |
echo " Сохрание тестовой конфигурации" | |
$ONEC_PATH/ibcmd infobase config save --db-path=$TEMP_DB_PATH $BINARY_PATH/configuration.cf > /dev/null | |
$ONEC_PATH/ibcmd infobase config save --db-path=$TEMP_DB_PATH $BINARY_PATH/configuration.cf >> $LOGS_PATH/configuration.log 2>&1 | |
print_state 'Сохрание тестовой конфигурации' | |
fi | |
for key in "${extensions_set[@]}";do | |
echo " Импорт расширения $key" | |
$ONEC_PATH/ibcmd infobase config import --db-path=$TEMP_DB_PATH --extension=$key $EXPORT_PATH/$key > /dev/null | |
echo " Сохрание расширения $key" | |
$ONEC_PATH/ibcmd infobase config save --db-path=$TEMP_DB_PATH --extension=$key $BINARY_PATH/$key.cfe > /dev/null | |
$ONEC_PATH/ibcmd infobase config import --db-path=$TEMP_DB_PATH --extension=$key $EXPORT_PATH/$key >> $LOGS_PATH/$key.log 2>&1 | |
print_state "Импорт расширения ${BOLD}$key${RESET}" | |
$ONEC_PATH/ibcmd infobase config save --db-path=$TEMP_DB_PATH --extension=$key $BINARY_PATH/$key.cfe >> $LOGS_PATH/$key.log 2>&1 | |
print_state "Сохрание расширения ${BOLD}$key${RESET}" | |
print_run "Сборка артефактов" | |
if ! $ONEC_PATH/ibcmd infobase create --db-path=$TEMP_DB_PATH --import=$EXPORT_PATH/configuration --apply --force >> $LOGS_PATH/configuration.log 2>&1; then | |
print_state "Ошибка создания информационной базы" | |
exit 1 | |
fi | |
print_state 'Создание информационной базы' | |
if [[ $configuration_exists -eq 0 ]]; then | |
if ! $ONEC_PATH/ibcmd infobase config save --db-path=$TEMP_DB_PATH $BINARY_PATH/configuration.cf >> $LOGS_PATH/configuration.log 2>&1; then | |
print_state "Ошибка сохранения конфигурации" | |
exit 1 | |
fi | |
print_state 'Сохрание тестовой конфигурации' | |
fi | |
for key in "${extensions_set[@]}";do | |
if ! $ONEC_PATH/ibcmd infobase config import --db-path=$TEMP_DB_PATH --extension=$key $EXPORT_PATH/$key >> $LOGS_PATH/$key.log 2>&1; then | |
print_state "Ошибка импорта расширения ${BOLD}$key${RESET}" | |
continue | |
fi | |
print_state "Импорт расширения ${BOLD}$key${RESET}" | |
if ! $ONEC_PATH/ibcmd infobase config save --db-path=$TEMP_DB_PATH --extension=$key $BINARY_PATH/$key.cfe >> $LOGS_PATH/$key.log 2>&1; then | |
print_state "Ошибка сохранения расширения ${BOLD}$key${RESET}" | |
continue | |
fi | |
print_state "Сохрание расширения ${BOLD}$key${RESET}" | |
done |
Функция ИсполняемыеНаборыМодуля(ТестовыйМодуль) Экспорт | ||
|
||
Результат = Новый Массив(); | ||
|
||
Для Каждого ТестовыйНабор Из ТестовыйМодуль.НаборыТестов Цикл | ||
|
||
НаборыКонтекстов = Новый Структура; | ||
|
||
ТестыНабора = ЮТКоллекции.ЗначениеСтруктуры(ТестовыйНабор, "Тесты", Новый Массив()); | ||
ОбработатьОшибкиЧтенияНабора(ТестовыйНабор, ТестовыйМодуль); | ||
|
||
Для Каждого Тест Из ТестыНабора Цикл | ||
|
||
Для Каждого Контекст Из Тест.КонтекстВызова Цикл | ||
|
||
Если НЕ НаборыКонтекстов.Свойство(Контекст) Тогда | ||
ИсполняемыйНабор = ЮТФабрикаСлужебный.НовоеОписаниеИсполняемогоНабораТестов(ТестовыйНабор); | ||
ИсполняемыйНабор.Режим = Контекст; | ||
НаборыКонтекстов.Вставить(Контекст, ИсполняемыйНабор); | ||
Иначе | ||
ИсполняемыйНабор = НаборыКонтекстов[Контекст]; | ||
КонецЕсли; | ||
|
||
ИсполняемыйТест = ЮТФабрикаСлужебный.НовоеОписаниеИсполняемогоТеста(Тест, Контекст, ТестовыйМодуль); | ||
|
||
Если Тест.Свойство("Ошибки") И Тест.Ошибки.Количество() > 0 Тогда | ||
ИсполняемыйТест.Ошибки = ЮТКоллекции.СкопироватьМассив(Тест.Ошибки); | ||
ИсполняемыйТест.ДатаСтарта = ТекущаяУниверсальнаяДатаВМиллисекундах(); | ||
ИсполняемыйТест.Длительность = 0; | ||
КонецЕсли; | ||
|
||
ИсполняемыйНабор.Тесты.Добавить(ИсполняемыйТест); | ||
|
||
КонецЦикла; | ||
|
||
КонецЦикла; | ||
|
||
Если НаборыКонтекстов.Количество() Тогда | ||
|
||
Для Каждого Элемент Из НаборыКонтекстов Цикл | ||
Результат.Добавить(Элемент.Значение); | ||
КонецЦикла; | ||
|
||
КонецЕсли; | ||
|
||
КонецЦикла; | ||
|
||
Возврат Результат; | ||
|
||
КонецФункции |
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.
🛠️ Refactor suggestion
Рекомендуется снизить когнитивную сложность функции.
Функция ИсполняемыеНаборыМодуля
имеет высокую когнитивную сложность.
Предлагаю разделить функцию на более мелкие методы:
- Метод создания исполняемого набора
- Метод обработки тестов набора
- Метод добавления тестов в набор
-Функция ИсполняемыеНаборыМодуля(ТестовыйМодуль) Экспорт
+Функция ИсполняемыеНаборыМодуля(ТестовыйМодуль) Экспорт
+ Результат = Новый Массив();
+
+ Для Каждого ТестовыйНабор Из ТестовыйМодуль.НаборыТестов Цикл
+ ДобавитьИсполняемыеНаборыИзТестовогоНабора(Результат, ТестовыйНабор, ТестовыйМодуль);
+ КонецЦикла;
+
+ Возврат Результат;
+КонецФункции
+
+Процедура ДобавитьИсполняемыеНаборыИзТестовогоНабора(Результат, ТестовыйНабор, ТестовыйМодуль)
+ НаборыКонтекстов = СоздатьНаборыПоКонтекстам(ТестовыйНабор, ТестовыйМодуль);
+
+ Если НаборыКонтекстов.Количество() Тогда
+ Для Каждого Элемент Из НаборыКонтекстов Цикл
+ Результат.Добавить(Элемент.Значение);
+ КонецЦикла;
+ КонецЕсли;
+КонецПроцедуры
Committable suggestion skipped: line range outside the PR's diff.
Функция ТестовыйМодуль(ОписаниеТестовогоОбъекта) | ||
|
||
Если ОписаниеТестовогоОбъекта.Метаданные.Тип = "ОбщийМодуль" Тогда | ||
Возврат ЮТМетодыСлужебный.ВычислитьБезопасно(ОписаниеТестовогоОбъекта.Метаданные.Имя); | ||
КонецЕсли; | ||
|
||
Если ОписаниеТестовогоОбъекта.Метаданные.Тип = "ВнешняяОбработка" Тогда | ||
#Если Клиент Тогда | ||
Возврат ПолучитьФорму(СтрШаблон("ВнешняяОбработка %1.Форма", ОписаниеТестовогоОбъекта.Метаданные.Имя)); | ||
#Иначе | ||
Возврат ВнешниеОбработки.Создать(ОписаниеТестовогоОбъекта.Метаданные.Имя); | ||
#КонецЕсли | ||
КонецЕсли; | ||
|
||
КонецФункции |
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.
Проверьте обработку ошибок при получении формы.
В функции ТестовыйМодуль
используется небезопасный метод ПолучитьФорму
.
Рекомендуется:
- Добавить обработку исключений
- Проверить существование формы перед её получением
- Возврат ПолучитьФорму(СтрШаблон("ВнешняяОбработка %1.Форма", ОписаниеТестовогоОбъекта.Метаданные.Имя));
+ Попытка
+ ИмяФормы = СтрШаблон("ВнешняяОбработка %1.Форма", ОписаниеТестовогоОбъекта.Метаданные.Имя);
+ Если ИмеетсяФорма(ИмяФормы) Тогда
+ Возврат ПолучитьФорму(ИмяФормы);
+ Иначе
+ ВызватьИсключение "Форма " + ИмяФормы + " не найдена";
+ КонецЕсли;
+ Исключение
+ ВызватьИсключение "Ошибка при получении формы: " + ОписаниеОшибки();
+ КонецПопытки;
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
Функция ТестовыйМодуль(ОписаниеТестовогоОбъекта) | |
Если ОписаниеТестовогоОбъекта.Метаданные.Тип = "ОбщийМодуль" Тогда | |
Возврат ЮТМетодыСлужебный.ВычислитьБезопасно(ОписаниеТестовогоОбъекта.Метаданные.Имя); | |
КонецЕсли; | |
Если ОписаниеТестовогоОбъекта.Метаданные.Тип = "ВнешняяОбработка" Тогда | |
#Если Клиент Тогда | |
Возврат ПолучитьФорму(СтрШаблон("ВнешняяОбработка %1.Форма", ОписаниеТестовогоОбъекта.Метаданные.Имя)); | |
#Иначе | |
Возврат ВнешниеОбработки.Создать(ОписаниеТестовогоОбъекта.Метаданные.Имя); | |
#КонецЕсли | |
КонецЕсли; | |
КонецФункции | |
Функция ТестовыйМодуль(ОписаниеТестовогоОбъекта) | |
Если ОписаниеТестовогоОбъекта.Метаданные.Тип = "ОбщийМодуль" Тогда | |
Возврат ЮТМетодыСлужебный.ВычислитьБезопасно(ОписаниеТестовогоОбъекта.Метаданные.Имя); | |
КонецЕсли; | |
Если ОписаниеТестовогоОбъекта.Метаданные.Тип = "ВнешняяОбработка" Тогда | |
#Если Клиент Тогда | |
Попытка | |
ИмяФормы = СтрШаблон("ВнешняяОбработка %1.Форма", ОписаниеТестовогоОбъекта.Метаданные.Имя); | |
Если ИмеетсяФорма(ИмяФормы) Тогда | |
Возврат ПолучитьФорму(ИмяФормы); | |
Иначе | |
ВызватьИсключение "Форма " + ИмяФормы + " не найдена"; | |
КонецЕсли; | |
Исключение | |
ВызватьИсключение "Ошибка при получении формы: " + ОписаниеОшибки(); | |
КонецПопытки; | |
#Иначе | |
Возврат ВнешниеОбработки.Создать(ОписаниеТестовогоОбъекта.Метаданные.Имя); | |
#КонецЕсли | |
КонецЕсли; | |
КонецФункции |
Описание изменений
Close #467
Summary by CodeRabbit
ИсполняемыеСценарииВременнойОбработки
,ЗагрузитьТестыВременнойОбработки
,ВыполнитьТестыВременнойОбработки
.МетаданныеОбработки
для получения метаданных обработки модулей.