Skip to content
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

Open
wants to merge 4 commits into
base: develop
Choose a base branch
from

Conversation

alkoleft
Copy link
Member

@alkoleft alkoleft commented Dec 18, 2024

Описание изменений


  • Добавлены тесты
  • Изменения отражены в документации (при необходимости)

Close #467

Summary by CodeRabbit

  • Новые функции
    • Добавлены процедуры для обработки тестов: ИсполняемыеСценарииВременнойОбработки, ЗагрузитьТестыВременнойОбработки, ВыполнитьТестыВременнойОбработки.
    • Введена функция МетаданныеОбработки для получения метаданных обработки модулей.
  • Изменения
    • Обновлены ссылки на описание метаданных в нескольких модулях.
    • Изменены сигнатуры процедур для улучшения ясности и контекста.
    • Удалены устаревшие функции, упрощая логику обработки тестов.
  • Конфигурация
    • Обновлены XML-файлы конфигурации для включения новых и удаления устаревших модулей.

Copy link

coderabbitai bot commented Dec 18, 2024

Walkthrough

Изменения в проекте YAXUnit затрагивают несколько ключевых модулей, связанных с обработкой тестов, метаданных и служебных функций. Основные модификации включают обновление ссылок на модули метаданных, добавление новых функций для работы с тестовыми сценариями и рефакторинг существующих процедур обработки событий. Изменения направлены на улучшение гибкости и расширяемости системы тестирования, с особым акцентом на клиент-серверное взаимодействие и обработку метаданных.

Changes

Файл Изменения
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 Обновление структуры метаданных, добавление новых параметров
exts/yaxunit/src/CommonModules/ЮТФабрикаСлужебный/Module.bsl Удаление функции ОписаниеМетаданныеМодуля, изменение логики в КонтекстыПриложения
tests/src/CommonModules/ОМ_ВыполнениеТестовОбработки/Module.bsl Добавление новых процедур для обработки временных тестов
tests/src/Configuration/Configuration.mdo Замена модуля ЮТМетаданныеСлужебный на ЮТМетаданныеСлужебныйКлиентСервер
tools/local-test/scripts/lib/prepare-db.sh Изменение пути логирования и улучшение вывода
tools/local-test/scripts/lib/print.sh Обновление определения цветов и форматирования вывода
tools/local-test/scripts/run-tests.sh Улучшение форматирования вывода и логирования
tools/v8unpack/build-epf.bat Замена жестко заданного имени файла на параметризованный ввод

Sequence Diagram

sequenceDiagram
    participant TestModule as Тестовый Модуль
    participant ClientServer as ЮТИсполнительСлужебныйКлиентСервер
    participant EventHandler as ЮТСобытияСлужебный
    
    TestModule->>ClientServer: Создание исполняемого теста
    ClientServer-->>TestModule: Возвращает описание теста
    TestModule->>EventHandler: Вызов обработчиков событий
    EventHandler-->>TestModule: Выполнение предварительных и последующих действий
Loading

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?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

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)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@github-actions github-actions bot left a 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! failed

bug 1 Bugs
vulnerability 0 Vulnerabilities
code_smell 1 Code Smells

No data Coverage
duplication_lt_3 0.00% Duplication


КонецФункции

Функция ИсполняемыеНаборыМодуля(ТестовыйМодуль) Экспорт
Copy link
Contributor

Choose a reason for hiding this comment

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

🔗Уменьшите когнитивную сложность "ИсполняемыеНаборыМодуля" с 21 до 15

CODE_SMELL Codesmell  CRITICAL Critical

brainoverload parameters  Why is this an issue?


Если ОписаниеТестовогоОбъекта.Метаданные.Тип = "ВнешняяОбработка" Тогда
#Если Клиент Тогда
Возврат ПолучитьФорму(СтрШаблон("ВнешняяОбработка %1.Форма", ОписаниеТестовогоОбъекта.Метаданные.Имя));
Copy link
Contributor

Choose a reason for hiding this comment

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

🔗Не рекомендуемое использование метода ПолучитьФорму

BUG Bug  MAJOR Major

error  Why is this an issue?

@alkoleft alkoleft changed the title feat: запуск тестов из внешних обработок 467 / запуск тестов из внешних обработок Dec 18, 2024
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: 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: Рассмотрите возможность параметризации тестовых сценариев

Текущая реализация использует жестко закодированные тестовые процедуры. Рекомендуется:

  1. Вынести текст процедур в отдельный макет
  2. Добавить возможность параметризации тестовых сценариев
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9fcb7c3 and 075f578.

📒 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

@github-actions github-actions bot deleted a comment from coderabbitai bot Dec 18, 2024
@github-actions github-actions bot deleted a comment from coderabbitai bot Dec 18, 2024
@github-actions github-actions bot deleted a comment from coderabbitai bot Dec 18, 2024
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: 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: Улучшите обработку вывода логов

Логирование улучшено, но есть возможность для оптимизации:

  1. Нет проверки существования директории для логов
  2. Возможно переполнение лог-файла при многократном запуске

Предлагаю следующие изменения:

+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>&1
tools/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} завершилось с ошибкой"
fi

Also 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: Рекомендации по улучшению скрипта в целом

  1. Добавьте проверку входных параметров
  2. Используйте константы для часто используемых значений
  3. Добавьте очистку временных файлов
+#!/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

📥 Commits

Reviewing files that changed from the base of the PR and between 075f578 and 091b06e.

⛔ 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: Проверьте ротацию лог-файлов

Перенаправление вывода в лог-файл - правильное решение, но стоит учесть:

  1. Возможное переполнение директории логов при частом запуске тестов
  2. Отсутствие механизма очистки старых логов

Рекомендуется добавить механизм очистки старых лог-файлов, например:

  • Удаление логов старше 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: Улучшение структуры метаданных модуля

Добавление поля Тип в описание метаданных модуля улучшает:

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

Comment on lines 19 to 20
rm -rf $EXPORT_PATH/$PROJECT_NAME
rm -rf $BINARY_PATH/$PROJECT_NAME.*
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Необходимо обеспечить безопасное использование 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.

Suggested change
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)

Comment on lines 18 to +22
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}"
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Необходимо исправить обработку переменной 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)

Comment on lines +8 to +16
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
Copy link

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.

Suggested change
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/*
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Необходимо добавить проверку безопасности при очистке директории логов

Текущая реализация может быть небезопасной, если переменная $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.

Suggested change
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
Copy link

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.

Comment on lines +9 to +11
$DESIGNER_COMMAND /LoadCfg $BINARY_PATH/configuration.cf /UpdateDBCfg >> $LOGS_PATH/$JOB_NAME.log 2>&1
SUCCESS=$?
print_state "Загрузка конфигурации в ${BOLD}$JOB_NAME${RESET}"
Copy link

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.

Suggested change
$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}"

Comment on lines 1 to 4
TEMP_DB_PATH=$TMP_PATH/file-db
. $LIB_PATH/print.sh

rm -rf $TEMP_DB_PATH/*
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Необходимо обезопасить операцию удаления

Текущая реализация команды 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.

Suggested change
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)

Comment on lines +27 to +42
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}"
Copy link

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.

Suggested change
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

Comment on lines +59 to +108
Функция ИсполняемыеНаборыМодуля(ТестовыйМодуль) Экспорт

Результат = Новый Массив();

Для Каждого ТестовыйНабор Из ТестовыйМодуль.НаборыТестов Цикл

НаборыКонтекстов = Новый Структура;

ТестыНабора = ЮТКоллекции.ЗначениеСтруктуры(ТестовыйНабор, "Тесты", Новый Массив());
ОбработатьОшибкиЧтенияНабора(ТестовыйНабор, ТестовыйМодуль);

Для Каждого Тест Из ТестыНабора Цикл

Для Каждого Контекст Из Тест.КонтекстВызова Цикл

Если НЕ НаборыКонтекстов.Свойство(Контекст) Тогда
ИсполняемыйНабор = ЮТФабрикаСлужебный.НовоеОписаниеИсполняемогоНабораТестов(ТестовыйНабор);
ИсполняемыйНабор.Режим = Контекст;
НаборыКонтекстов.Вставить(Контекст, ИсполняемыйНабор);
Иначе
ИсполняемыйНабор = НаборыКонтекстов[Контекст];
КонецЕсли;

ИсполняемыйТест = ЮТФабрикаСлужебный.НовоеОписаниеИсполняемогоТеста(Тест, Контекст, ТестовыйМодуль);

Если Тест.Свойство("Ошибки") И Тест.Ошибки.Количество() > 0 Тогда
ИсполняемыйТест.Ошибки = ЮТКоллекции.СкопироватьМассив(Тест.Ошибки);
ИсполняемыйТест.ДатаСтарта = ТекущаяУниверсальнаяДатаВМиллисекундах();
ИсполняемыйТест.Длительность = 0;
КонецЕсли;

ИсполняемыйНабор.Тесты.Добавить(ИсполняемыйТест);

КонецЦикла;

КонецЦикла;

Если НаборыКонтекстов.Количество() Тогда

Для Каждого Элемент Из НаборыКонтекстов Цикл
Результат.Добавить(Элемент.Значение);
КонецЦикла;

КонецЕсли;

КонецЦикла;

Возврат Результат;

КонецФункции
Copy link

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.

Comment on lines +373 to +387
Функция ТестовыйМодуль(ОписаниеТестовогоОбъекта)

Если ОписаниеТестовогоОбъекта.Метаданные.Тип = "ОбщийМодуль" Тогда
Возврат ЮТМетодыСлужебный.ВычислитьБезопасно(ОписаниеТестовогоОбъекта.Метаданные.Имя);
КонецЕсли;

Если ОписаниеТестовогоОбъекта.Метаданные.Тип = "ВнешняяОбработка" Тогда
#Если Клиент Тогда
Возврат ПолучитьФорму(СтрШаблон("ВнешняяОбработка %1.Форма", ОписаниеТестовогоОбъекта.Метаданные.Имя));
#Иначе
Возврат ВнешниеОбработки.Создать(ОписаниеТестовогоОбъекта.Метаданные.Имя);
#КонецЕсли
КонецЕсли;

КонецФункции
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Проверьте обработку ошибок при получении формы.

В функции ТестовыйМодуль используется небезопасный метод ПолучитьФорму.

Рекомендуется:

  1. Добавить обработку исключений
  2. Проверить существование формы перед её получением
-        Возврат ПолучитьФорму(СтрШаблон("ВнешняяОбработка %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.

Suggested change
Функция ТестовыйМодуль(ОписаниеТестовогоОбъекта)
Если ОписаниеТестовогоОбъекта.Метаданные.Тип = "ОбщийМодуль" Тогда
Возврат ЮТМетодыСлужебный.ВычислитьБезопасно(ОписаниеТестовогоОбъекта.Метаданные.Имя);
КонецЕсли;
Если ОписаниеТестовогоОбъекта.Метаданные.Тип = "ВнешняяОбработка" Тогда
#Если Клиент Тогда
Возврат ПолучитьФорму(СтрШаблон("ВнешняяОбработка %1.Форма", ОписаниеТестовогоОбъекта.Метаданные.Имя));
#Иначе
Возврат ВнешниеОбработки.Создать(ОписаниеТестовогоОбъекта.Метаданные.Имя);
#КонецЕсли
КонецЕсли;
КонецФункции
Функция ТестовыйМодуль(ОписаниеТестовогоОбъекта)
Если ОписаниеТестовогоОбъекта.Метаданные.Тип = "ОбщийМодуль" Тогда
Возврат ЮТМетодыСлужебный.ВычислитьБезопасно(ОписаниеТестовогоОбъекта.Метаданные.Имя);
КонецЕсли;
Если ОписаниеТестовогоОбъекта.Метаданные.Тип = "ВнешняяОбработка" Тогда
#Если Клиент Тогда
Попытка
ИмяФормы = СтрШаблон("ВнешняяОбработка %1.Форма", ОписаниеТестовогоОбъекта.Метаданные.Имя);
Если ИмеетсяФорма(ИмяФормы) Тогда
Возврат ПолучитьФорму(ИмяФормы);
Иначе
ВызватьИсключение "Форма " + ИмяФормы + " не найдена";
КонецЕсли;
Исключение
ВызватьИсключение "Ошибка при получении формы: " + ОписаниеОшибки();
КонецПопытки;
#Иначе
Возврат ВнешниеОбработки.Создать(ОписаниеТестовогоОбъекта.Метаданные.Имя);
#КонецЕсли
КонецЕсли;
КонецФункции

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.

Запуск тестов из обработок
1 participant