-
Notifications
You must be signed in to change notification settings - Fork 55
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
120 / Конструктор движений #413
Conversation
WalkthroughВнесенные изменения охватывают несколько файлов, связанных с управлением данными и тестированием в контексте клиент-серверного взаимодействия. Основные изменения включают добавление новых функций для работы с объектами и таблицами, а также улучшение обработки движений в регистрах. В результате система теперь поддерживает более сложные операции с данными и тестами, а также улучшена структура модулей для повышения ясности и удобства использования. Changes
Assessment against linked issues
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! ![failed](https://camo.githubusercontent.com/3d1e22711b42d462b139252075639630993d8b729de65b1212ade646b89e4404/68747470733a2f2f68736f6e61722e73332e61702d736f757468656173742d312e616d617a6f6e6177732e636f6d2f696d616765732f6661696c65642e706e67)
1 Bugs
0 Vulnerabilities
1 Code Smells
No data Coverage
25.85% 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.
Actionable comments posted: 10
Outside diff range and nitpick comments (6)
tests/src/CommonModules/ОМ_ЮТКонструкторКоллекцийСлужебныйКлиентСервер/Module.bsl (4)
32-36
: Напоминание: реализовать тест.Процедура
Инициализировать
в настоящее время содержит заглушку, которая вызывает исключение с сообщением "Тест не реализован". Пожалуйста, не забудьте реализовать фактическую логику теста.Хотите, чтобы я открыл задачу в GitHub для отслеживания этой работы?
38-42
: Напоминание: реализовать тест.Процедура
ДобавитьКолонку
в настоящее время содержит заглушку, которая вызывает исключение с сообщением "Тест не реализован". Пожалуйста, не забудьте реализовать фактическую логику теста.Хотите, чтобы я открыл задачу в GitHub для отслеживания этой работы?
44-48
: Напоминание: реализовать тест.Процедура
Добавить
в настоящее время содержит заглушку, которая вызывает исключение с сообщением "Тест не реализован". Пожалуйста, не забудьте реализовать фактическую логику теста.Хотите, чтобы я открыл задачу в GitHub для отслеживания этой работы?
50-54
: Напоминание: реализовать тест.Процедура
Данные
в настоящее время содержит заглушку, которая вызывает исключение с сообщением "Тест не реализован". Пожалуйста, не забудьте реализовать фактическую логику теста.Хотите, чтобы я открыл задачу в GitHub для отслеживания этой работы?
tests/src/Configuration/Configuration.mdo (2)
33-33
: Добавлен новый общий модульCommonModule.Обр_ЮТКонструкторДвижений_МО
.Пожалуйста, предоставьте более подробную информацию о назначении и использовании этого модуля. Это поможет лучше понять его роль в общей функциональности и облегчит дальнейшее сопровождение кода.
47-47
: Добавлен новый общий модульCommonModule.ОМ_ЮТКонструкторКоллекцийСлужебныйКлиентСервер
.Пожалуйста, предоставьте более подробную информацию о назначении и использовании этого модуля. В частности, поясните:
- Какую функциональность он предоставляет в контексте работы с коллекциями?
- Как он взаимодействует с существующим модулем
CommonModule.ОМ_ЮТКоллекции
?- Какие аспекты реализованы на клиенте, а какие на сервере?
Это поможет лучше понять архитектуру и облегчит дальнейшее сопровождение кода.
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files selected for processing (14)
- exts/yaxunit/src/CommonModules/ЮТКонструкторКоллекцийСлужебныйКлиентСервер/Module.bsl (1 hunks)
- exts/yaxunit/src/CommonModules/ЮТКонструкторКоллекцийСлужебныйКлиентСервер/ЮТКонструкторКоллекцийСлужебныйКлиентСервер.mdo (1 hunks)
- exts/yaxunit/src/CommonModules/ЮТКонструкторТестовыхДанныхСлужебный/Module.bsl (8 hunks)
- exts/yaxunit/src/CommonModules/ЮТМетаданные/Module.bsl (1 hunks)
- exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl (1 hunks)
- exts/yaxunit/src/Configuration/Configuration.mdo (2 hunks)
- exts/yaxunit/src/DataProcessors/ЮТКонструкторДвижений/ObjectModule.bsl (1 hunks)
- exts/yaxunit/src/DataProcessors/ЮТКонструкторДвижений/ЮТКонструкторДвижений.mdo (1 hunks)
- exts/yaxunit/src/DataProcessors/ЮТКонструкторТестовыхДанных/ObjectModule.bsl (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/Обр_ЮТКонструкторДвижений_МО/Обр_ЮТКонструкторДвижений_МО.mdo (1 hunks)
- tests/src/Configuration/Configuration.mdo (2 hunks)
Additional comments not posted (29)
tests/src/CommonModules/Обр_ЮТКонструкторДвижений_МО/Обр_ЮТКонструкторДвижений_МО.mdo (1)
1-7
: Определение общего модуля выглядит корректным.Новый общий модуль "Обр_ЮТКонструкторДвижений_МО" определен правильно:
- XML-структура соответствует формату метаданных.
- Модуль помечен как управляемое клиентское приложение, серверное приложение и обычное клиентское приложение, что указывает на его возможности работы как на клиенте, так и на сервере.
- Включен уникальный идентификатор (UUID) для однозначной идентификации модуля.
Определение модуля соответствует стандартам и готово к использованию.
tests/src/CommonModules/ОМ_ЮТКонструкторКоллекцийСлужебныйКлиентСервер/ОМ_ЮТКонструкторКоллекцийСлужебныйКлиентСервер.mdo (1)
1-7
: Изменения выглядят хорошо!Новый общий модуль "ОМ_ЮТКонструкторКоллекцийСлужебныйКлиентСервер" объявлен корректно:
- XML-структура соответствует формату метаданных и использует правильное пространство имен.
- Свойства модуля, такие как
clientManagedApplication
,server
иclientOrdinaryApplication
, установлены должным образом.Никаких проблем с конфигурацией модуля не обнаружено.
exts/yaxunit/src/CommonModules/ЮТКонструкторКоллекцийСлужебныйКлиентСервер/ЮТКонструкторКоллекцийСлужебныйКлиентСервер.mdo (1)
1-11
: Новый общий модуль выглядит хорошо!Структура XML-файла правильная и соответствует ожидаемой схеме метаданных. Общий модуль имеет уникальный идентификатор UUID, русский синоним и правильно помечен как клиентское, серверное и обычное клиентское приложение.
Никаких проблем не обнаружено. Добавление нового общего модуля одобрено.
exts/yaxunit/src/DataProcessors/ЮТКонструкторДвижений/ЮТКонструкторДвижений.mdo (1)
1-13
: Новый класс обработки данных соответствует ожидаемой структуре и соглашениям.Представленный XML-файл правильно определяет новый класс обработки данных "ЮТКонструкторДвижений" в рамках метаданных. Файл точно указывает структуру и свойства обработчика данных, включая его UUID, производимые типы, имя, синоним и использование стандартных команд. Введение этого нового класса обработки данных расширяет возможности системы по управлению движениями данных и коллекциями.
tests/src/CommonModules/ОМ_ЮТКонструкторКоллекцийСлужебныйКлиентСервер/Module.bsl (1)
21-30
: Выглядит хорошо!Процедура
ИсполняемыеСценарии
корректно добавляет набор тестовых сценариев в тестовый набор с использованием объектаЮТТесты
. Каждый добавленный тест соответствует процедуре, определенной далее в файле.tests/src/CommonModules/Обр_ЮТКонструкторДвижений_МО/Module.bsl (8)
21-33
: LGTM!Процедура
ИсполняемыеСценарии
корректно инициализирует набор тестов с использованиемЮТТесты.ВТранзакции()
. Логика и синтаксис выглядят правильно.
35-49
: LGTM!Процедура
ДобавитьСтроку
корректно тестирует метод "ДобавитьСтроку" конструктора движений. Она проверяет, что метод не выбрасывает исключение и возвращает ожидаемую структуру данных. Логика и синтаксис выглядят правильно.
51-68
: LGTM!Процедура
Установить
корректно тестирует метод "Установить" конструктора движений. Она проверяет, что метод выбрасывает исключение, если вызван до добавления строки, и что после добавления строки и установки контрагента структура данных содержит ожидаемые свойства. Логика и синтаксис выглядят правильно.
70-74
: Пропустить.Процедура
УстановитьРеквизиты
является заглушкой и не содержит реализации теста. Пока нет необходимости в комментариях.
76-80
: Пропустить.Процедура
Фикция
является заглушкой и не содержит реализации теста. Пока нет необходимости в комментариях.
82-86
: Пропустить.Процедура
ФикцияРеквизитов
является заглушкой и не содержит реализации теста. Пока нет необходимости в комментариях.
88-92
: Пропустить.Процедура
ФикцияОбязательныхПолей
является заглушкой и не содержит реализации теста. Пока нет необходимости в комментариях.
94-98
: Пропустить.Процедура
Инициализировать
является заглушкой и не содержит реализации теста. Пока нет необходимости в комментариях.exts/yaxunit/src/DataProcessors/ЮТКонструкторТестовыхДанных/ObjectModule.bsl (1)
274-274
: Изменение выглядит корректным, но требует дополнительной проверки.Изменение в реализации функции
ДанныеСтроки
заключается в вызове методаДанныеСтрокиТабличнойЧасти
вместоДанныеСтроки
. Это указывает на изменение логики обработки данных.Чтобы убедиться, что это изменение не повлияет на работу кода, выполните следующий скрипт для поиска использований функции
ДанныеСтроки
и проанализируйте, ожидаемо ли изменение поведения и совместимо ли оно:Verification successful
Изменение локализовано и не должно повлиять на другие части кодовой базы
Анализ использования функции
ДанныеСтроки()
показал, что изменение затрагивает только файл./exts/yaxunit/src/DataProcessors/ЮТКонструкторТестовыхДанных/ObjectModule.bsl
. Другие объявления этой функции в кодовой базе остались без изменений.Однако стоит отметить:
- Функция используется в нескольких тестовых файлах.
- Рекомендуется провести тщательное тестирование, чтобы убедиться, что изменение не повлияло на работу тестов и функциональность в целом.
Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Описание: Поиск использований функции `ДанныеСтроки` в коде. # Тест: Поиск вызовов функции `ДанныеСтроки`. # Ожидание: Только вызовы функции `ДанныеСтроки` без аргументов. rg --type bsl $'ДанныеСтроки\(\)'Length of output: 62
Script:
#!/bin/bash # Описание: Поиск использований функции `ДанныеСтроки` в коде .bsl файлов. # Поиск .bsl файлов и поиск в них вызовов функции `ДанныеСтроки()` echo "Поиск вызовов ДанныеСтроки() в .bsl файлах:" find . -name "*.bsl" -type f -exec grep -Hn "ДанныеСтроки()" {} + # Альтернативный метод с использованием ripgrep echo "Альтернативный поиск с использованием ripgrep:" rg --type-add 'bsl:*.bsl' -t bsl "ДанныеСтроки\(\)"Length of output: 1904
exts/yaxunit/src/Configuration/Configuration.mdo (2)
90-90
: Добавлен новый общий модульЮТКонструкторКоллекцийСлужебныйКлиентСервер
.Этот модуль расширяет функциональность конфигурации. Судя по названию, он предназначен для конструирования коллекций и может использоваться как на клиенте, так и на сервере.
163-163
: Добавлен новый обработчик данныхЮТКонструкторДвижений
.Этот обработчик расширяет функциональность конфигурации. Судя по названию, он предназначен для конструирования движений документов.
exts/yaxunit/src/CommonModules/ЮТМетаданные/Module.bsl (1)
310-320
: Выглядит хорошо!Реализация функции
ОписаниеРегистраДвиженийДокумента
корректна и хорошо структурирована:
- Функция принимает два параметра:
Документ
иИмяРегистра
, и возвращает описание метаданных регистра движения документа с указанным именем.- Логика функции проста для понимания. Она проверяет наличие регистра с указанным именем в наборе регистров движения документа, используя функцию
РегистрыДвиженийДокумента
.- Если регистр не найден, функция возвращает
Неопределено
. Это позволяет корректно обрабатывать случаи, когда запрошенный регистр отсутствует.- Если регистр найден, функция возвращает его описание метаданных, используя функцию
ОписаниеОбъектаМетаданных
.Функция будет полезна в сценариях, где требуется получить доступ к метаданным конкретного регистра движения документа.
exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl (2)
858-862
: Изменения выглядят хорошо!Новая экспортная функция
КонструкторДвижений
корректно делегирует инициализацию конструктора движений модулюЮТКонструкторТестовыхДанныхСлужебный
. Логика и синтаксис функции в порядке.
858-862
: Проверьте использование новой функции в кодовой базе.Убедитесь, что вызовы новой функции
КонструкторДвижений
корректно обрабатываются и не приводят к ошибкам.Запустите следующий скрипт для проверки использования функции:
Verification successful
Функция
КонструкторДвижений
корректно реализована и используется в кодовой базе.Проверка показала, что новая функция
КонструкторДвижений
успешно внедрена в модульЮТТестовыеДанные
и используется в тестовых модулях. Функция инициализируется с помощьюЮТКонструкторТестовыхДанныхСлужебный.ИнициализироватьКонструкторДвижений
, что соответствует ожидаемому поведению. В найденных случаях использования не обнаружено очевидных ошибок или некорректного применения функции.Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Описание: Проверка использования функции `КонструкторДвижений` в кодовой базе. # Тест: Поиск вызовов функции. Ожидается: Только корректное использование. rg --type bsl -A 5 $'КонструкторДвижений'Length of output: 204
Script:
#!/bin/bash # Описание: Проверка использования функции `КонструкторДвижений` в кодовой базе. # Поиск вызовов функции с помощью ast-grep ast-grep --lang bsl --pattern 'КонструкторДвижений($_)' # Если ast-grep не найдет результатов, выполним поиск с помощью rg if [ $? -ne 0 ]; then echo "Результаты поиска с помощью ripgrep:" rg -i 'КонструкторДвижений' -A 5 fiLength of output: 10380
exts/yaxunit/src/DataProcessors/ЮТКонструкторДвижений/ObjectModule.bsl (2)
124-128
: Проверьте корректность обработки массивов в методеФикцияРеквизитов
.Если
ИменаРеквизитов
передается как массив, убедитесь, что методЮТКонструкторТестовыхДанныхСлужебный.ФикцияРеквизитов
правильно обрабатывает этот тип данных. Возможно, потребуется добавить проверки или преобразования типов.
57-62
: Убедитесь в корректности обработки ошибок в методеУстановить
.Метод
Установить
вызываетЮТКонструкторТестовыхДанныхСлужебный.Установить
, но неизвестно, как обрабатываются возможные исключения или ошибки в вызываемом методе. Рекомендуется добавить обработку ошибок или подтвердить, что вызываемый метод надежно обрабатывает исключительные ситуации.exts/yaxunit/src/CommonModules/ЮТКонструкторТестовыхДанныхСлужебный/Module.bsl (8)
174-174
: Переименование функции для повышения ясностиПереименование функции
ДанныеСтроки
вДанныеСтрокиТабличнойЧасти
улучшает понимание ее назначения и делает код более понятным.
190-199
: Добавлена функция для работы с коллекциямиНовая функция
ДанныеСтрокиКоллекции
корректно реализует получение данных последней строки коллекции. Проверки на заполненность данных и обработка исключений реализованы правильно.
229-244
: Инициализация конструктора движенийФункция
ИнициализироватьКонструкторДвижений
корректно инициализирует конструктор движений в зависимости от типа приложения (сервер или клиент). Использование условной компиляции и методов получения формы соответствует лучшим практикам для платформы 1С.
278-289
: Создание нового контекста конструктора движенийФункция
НовыйКонтекстКонструктораДвижений
правильно инициализирует контекст для конструктора движений, устанавливая необходимые свойства. Логика функции соответствует ожиданиям.
333-333
: Использование функцииФокусНаТабличнойЧасти
В функции
Реквизиты
добавлена проверкаЕсли ФокусНаТабличнойЧасти(Контекст) Тогда
, что повышает читаемость и переиспользуемость кода.
347-347
: Улучшение сообщения об ошибкеДобавление проверки
Если ФокусНаТабличнойЧасти(Контекст) Тогда
при формировании пояснения позволяет предоставить более точное сообщение об ошибке, указывая на конкретную табличную часть.
362-365
: Корректировка логики функцииТекущаяЗапись
Добавление условия
ИначеЕсли ЭтоКонструкторКоллекции(Контекст) Тогда
обеспечивает правильное определение текущей записи в контексте конструктора коллекции, что улучшает работу функции в разных сценариях.
379-384
: Новая функцияФокусНаТабличнойЧасти
Функция
ФокусНаТабличнойЧасти
правильно определяет, находится ли текущий фокус на табличной части. Это повышает читаемость кода и способствует его повторному использованию.
@coderabbitai Сделай переводы всех строк в коде и создай suggestions. Используя подход |
0b72452
to
6ea961c
Compare
Oops, something went wrong! Please try again later. 🐰 💔 |
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: 6
Outside diff range and nitpick comments (3)
tests/src/CommonModules/Обр_ЮТКонструкторДвижений_МО/Module.bsl (3)
92-93
: Проверка выброса исключения на корректность использования методаВ строках 92-93 выполняется проверка выброса исключения при вызове метода "Установить" без предварительного добавления строки:
ЮТест.ОжидаетЧто(Конструктор) .Метод("Установить", ЮТКоллекции.ЗначениеВМассиве("Покупатель", Покупатель)).ВыбрасываетИсключение("Сначала необходимо добавить строку");Убедитесь, что такая ситуация действительно возможна в использовании конструктора движений и что подобная проверка необходима для обеспечения корректности поведения.
193-196
: Единообразие использования кавычек в сообщениях исключенийВ сообщении исключения используются обратные кавычки для обозначения названий объектов:
.ВыбрасываетИсключение("`РегистрНакопления.ТоварныеЗапасы` не содержит реквизит `НесуществующийРеквизит`");Для улучшения читаемости и единообразия рекомендуется использовать один стиль кавычек в сообщениях, например, двойные кавычки или кавычки «ёлочки».
280-295
: Улучшение читаемости проверок записей регистра сведенийВ блоке проверки записей регистра:
ЮТест.ОжидаетЧто(ЗаписиРегистра) .Заполнено() .ИмеетДлину(1) .Свойство("[0].Регистратор").Равно(Документ) .Свойство("[0].Товар").Равно(Товар) .Свойство("[0].ВидЦен").Равно(ВидыЦены) .Свойство("[0].Цена").Равно(Цена) ;Длинные цепочки методов могут снижать читаемость кода. Рекомендуется разбить проверку на несколько отдельных утверждений или добавить комментарии для повышения понятности.
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files selected for processing (3)
- exts/yaxunit/src/CommonModules/ЮТКонструкторТестовыхДанныхСлужебный/Module.bsl (17 hunks)
- fixtures/demo-configuration/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl (1 hunks)
- tests/src/CommonModules/Обр_ЮТКонструкторДвижений_МО/Module.bsl (1 hunks)
Files skipped from review as they are similar to previous changes (2)
- exts/yaxunit/src/CommonModules/ЮТКонструкторТестовыхДанныхСлужебный/Module.bsl
- fixtures/demo-configuration/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl
Additional comments not posted (1)
tests/src/CommonModules/Обр_ЮТКонструкторДвижений_МО/Module.bsl (1)
109-114
: Проверка корректности установки пользовательского периодаПри установке периода в конструкторе движений:
.Установить("Период", Период);Рекомендуется убедиться, что установка пользовательского периода не конфликтует с системными настройками периода документа или регистра, и что это не приведет к некорректному поведению при записи движений.
Процедура Инициализировать() Экспорт | ||
|
||
// Создаем документ | ||
Документ = ЮТест.Данные().СоздатьДокумент("Документы.ПриходТовара"); | ||
|
||
// Инициализируем конструктор движений | ||
Конструктор = ЮТест.Данные().КонструкторДвижений(Документ, "ТоварныеЗапасы"); | ||
|
||
// Проверяем, что конструктор инициализирован | ||
ЮТест.ОжидаетЧто(Конструктор, "Конструктор должен быть инициализирован") | ||
.НеРавно(Неопределено); | ||
|
||
// Проверяем, что данные конструктора пусты | ||
Данные = Конструктор.Данные(); | ||
ЮТест.ОжидаетЧто(Данные, "Данные конструктора должны быть пустым массивом") | ||
.ИмеетТип("Массив") | ||
.Равно(Новый Массив); | ||
|
||
ЮТест.ОжидаетЧто(ЮТест.Данные()) | ||
.Метод("КонструкторДвижений", ЮТКоллекции.ЗначениеВМассиве(Документ, "НесуществующийРегистр")) | ||
.ВыбрасываетИсключение("Документ " + Документ + " не делает движений по регистру ""НесуществующийРегистр"""); | ||
|
||
КонецПроцедуры |
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
Предложение по устранению дублирования кода при создании документов
В нескольких процедурах, таких как "Инициализировать", "ДобавитьСтроку", "Установить" и других, повторяется код по созданию документов и инициализации конструктора движений. Рекомендуется вынести этот повторяющийся код в отдельную вспомогательную процедуру или функцию для повышения модульности и уменьшения дублирования кода.
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.
@alkoleft, понятно, спасибо за пояснение.
(っ˘̩╭╮˘̩)っ
Learnings added
Learnt from: alkoleft
PR: bia-technologies/yaxunit#413
File: tests/src/CommonModules/Обр_ЮТКонструкторДвижений_МО/Module.bsl:38-60
Timestamp: 2024-09-24T21:57:03.102Z
Learning: В тестах дублирование кода при создании документов и инициализации конструкторов движений оправдано.
Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.
Learnings used
Learnt from: alkoleft
PR: bia-technologies/yaxunit#413
File: tests/src/CommonModules/Обр_ЮТКонструкторДвижений_МО/Module.bsl:207-207
Timestamp: 2024-09-23T00:09:43.463Z
Learning: При написании тестов необходимо добавлять проверку записанных в регистр значений, используя методы `ЮТест.ОжидаетЧто` и `ЮТЗапросы.ДвиженияДокумента`, формируя проверки по образцу, например:
```bsl
ЮТест.ОжидаетЧто(ЮТЗапросы.ДвиженияДокумента(Документ, "Регистр"))
.Заполнено()
.ИмеетДлину(N)
.Свойство("[0].Параметр").Равно(Значение)
;
</details>
<!-- This is an auto-generated reply by CodeRabbit -->
|
||
ЮТест.ОжидаетЧто(ЮТест.Данные()) | ||
.Метод("КонструкторДвижений", ЮТКоллекции.ЗначениеВМассиве(Документ, "НесуществующийРегистр")) | ||
.ВыбрасываетИсключение("Документ " + Документ + " не делает движений по регистру ""НесуществующийРегистр"""); |
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.
Некорректное использование кавычек в сообщении исключения
В строке 58 при формировании сообщения исключения используются двойные кавычки внутри строки, что может привести к ошибкам при выводе сообщения:
"Документ " + Документ + " не делает движений по регистру ""НесуществующийРегистр"""
Рекомендуется использовать одинарные кавычки для обозначения имени регистра или экранировать двойные кавычки, чтобы сообщение отображалось корректно.
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с (bsl), это способ экранирования двойных кавычек
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.
@alkoleft, спасибо за разъяснение. Я учту это при будущих обзорах.
(_/)
(•.•)
( 💭)
Learnings added
Learnt from: alkoleft
PR: bia-technologies/yaxunit#413
File: tests/src/CommonModules/Обр_ЮТКонструкторДвижений_МО/Module.bsl:58-58
Timestamp: 2024-09-24T21:56:56.855Z
Learning: В языке 1С (BSL) для экранирования двойных кавычек внутри строк используется удвоенная кавычка (`""`).
Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.
Learnings used
Learnt from: alkoleft
PR: bia-technologies/yaxunit#413
File: tests/src/CommonModules/Обр_ЮТКонструкторДвижений_МО/Module.bsl:207-207
Timestamp: 2024-09-23T00:09:43.463Z
Learning: При написании тестов необходимо добавлять проверку записанных в регистр значений, используя методы `ЮТест.ОжидаетЧто` и `ЮТЗапросы.ДвиженияДокумента`, формируя проверки по образцу, например:
```bsl
ЮТест.ОжидаетЧто(ЮТЗапросы.ДвиженияДокумента(Документ, "Регистр"))
.Заполнено()
.ИмеетДлину(N)
.Свойство("[0].Параметр").Равно(Значение)
;
</details>
<!-- This is an auto-generated reply by CodeRabbit -->
.Свойство(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.
Потенциальная ошибка при обращении к первому элементу массива
В блоке:
ЮТест.ОжидаетЧто(Данные)
.Заполнено()
.ИмеетТип("Массив")
.ИмеетДлину(1)
.Свойство(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.
Наличие элементов проверяется утверждением Заполнено()
и ИмеетДлину(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.
@alkoleft, спасибо за уточнение. Вы правы, наличие элементов проверяется при помощи утверждений Заполнено()
и ИмеетДлину(1)
, поэтому дополнительная проверка не требуется. Извините за беспокойство.
(。•́︿•̀。)
Learnings added
Learnt from: alkoleft
PR: bia-technologies/yaxunit#413
File: tests/src/CommonModules/Обр_ЮТКонструкторДвижений_МО/Module.bsl:75-77
Timestamp: 2024-09-24T21:57:02.761Z
Learning: При проверке массивов в тестах, если используются утверждения `Заполнено()` и `ИмеетДлину(N)`, обращение к элементам массива по индексу считается безопасным, и не требуется дополнительной проверки наличия элементов.
Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.
Learnings used
Learnt from: alkoleft
PR: bia-technologies/yaxunit#413
File: tests/src/CommonModules/Обр_ЮТКонструкторДвижений_МО/Module.bsl:207-207
Timestamp: 2024-09-23T00:09:43.463Z
Learning: При написании тестов необходимо добавлять проверку записанных в регистр значений, используя методы `ЮТест.ОжидаетЧто` и `ЮТЗапросы.ДвиженияДокумента`, формируя проверки по образцу, например:
```bsl
ЮТест.ОжидаетЧто(ЮТЗапросы.ДвиженияДокумента(Документ, "Регистр"))
.Заполнено()
.ИмеетДлину(N)
.Свойство("[0].Параметр").Равно(Значение)
;
</details>
<!-- This is an auto-generated reply by CodeRabbit -->
МассивПараметров = ЮТКоллекции.ЗначениеВМассиве("Несуществующий1"); | ||
ЮТест.ОжидаетЧто(Конструктор) | ||
.Метод("ФикцияРеквизитов", МассивПараметров) | ||
.ВыбрасываетИсключение("`РегистрНакопления.ТоварныеЗапасы` не содержит реквизит `Несуществующий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
Устранение дублирования в проверках выброса исключений
Код проверки выброса исключения при указании несуществующего реквизита повторяется:
ЮТест.ОжидаетЧто(Конструктор)
.Метод("ФикцияРеквизитов", МассивПараметров)
.ВыбрасываетИсключение("`РегистрНакопления.ТоварныеЗапасы` не содержит реквизит `Несуществующий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.
Утверждение Свойство(Поле)
как раз проверяет наличие реквизита
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.
@alkoleft, спасибо за разъяснение. Действительно, метод Свойство(Поле)
проверяет наличие реквизита, что предотвращает ошибку выполнения при его отсутствии.
(_/)
( •_•)
( >💡< )
Learnings added
Learnt from: alkoleft
PR: bia-technologies/yaxunit#413
File: tests/src/CommonModules/Обр_ЮТКонструкторДвижений_МО/Module.bsl:250-257
Timestamp: 2024-09-24T21:57:11.772Z
Learning: Метод `Свойство(Поле)` в `ЮТест.ОжидаетЧто` проверяет наличие реквизита и предотвращает ошибку выполнения, если реквизит отсутствует.
Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.
Документ = ЮТест.Данные().СоздатьДокумент("Документы.РасходТовара"); | ||
|
||
// Инициализируем конструктор движений | ||
ЮТест.Данные().КонструкторДвижений(Документ, "ТоварныеЗапасы") | ||
.ДобавитьСтроку() | ||
.ФикцияРеквизитов("Товар, Склад, Количество") | ||
.Записать(); | ||
|
||
ЮТест.ОжидаетЧтоТаблицаБазы("РегистрНакопления.ТоварныеЗапасы") | ||
.СодержитЗаписи(ЮТест.Предикат() | ||
.Реквизит("Регистратор").Равно(Документ)); | ||
|
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.
Наличие записей проверяется утверждением ЮТест.ОжидаетЧтоТаблицаБазы("РегистрНакопления.ТоварныеЗапасы").СодержитЗаписи()
этого достаточно
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.
@alkoleft, спасибо за уточнение. Если проверка ЮТест.ОжидаетЧтоТаблицаБазы("РегистрНакопления.ТоварныеЗапасы").СодержитЗаписи()
достаточна для ваших нужд, то дополнительных замечаний нет.
Learnings added
Learnt from: alkoleft
PR: bia-technologies/yaxunit#413
File: tests/src/CommonModules/Обр_ЮТКонструкторДвижений_МО/Module.bsl:302-313
Timestamp: 2024-09-24T21:56:58.470Z
Learning: В процедуре "Записать_РегистрНакопления" наличие записей проверяется с помощью `ЮТест.ОжидаетЧтоТаблицаБазы("РегистрНакопления.ТоварныеЗапасы").СодержитЗаписи()`, что достаточно для проверки записей.
Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.
@coderabbitai Сделай переводы всех строк в коде и создай suggestions. Используя подход НСтр("ru='Курс не может быть отрицательным или нулем';en='Exchange rate cannot be negative or zero'"); |
Oops, something went wrong! Please try again later. 🐰 💔 |
Описание изменений
Close #120
Summary by CodeRabbit