From 877fde8dd49a72fac87ec47a3376394e7365610b Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Thu, 13 Aug 2026 20:38:00 +0300 Subject: [PATCH] =?UTF-8?q?test(role-compile,role-validate):=20=D0=BF?= =?UTF-8?q?=D0=BB=D0=B0=D1=82=D1=84=D0=BE=D1=80=D0=BC=D0=B5=D0=BD=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D0=B2=D0=B5=D1=80=D0=B8=D1=84=D0=B8=D0=BA=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D1=81=D0=BD=D0=B0=D0=BF=D1=88=D0=BE=D1=82?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=B8=20=D1=83=D1=87=D1=91=D1=82=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=BF=D1=83=D1=81=D0=BA=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Прогон verify-snapshots вскрыл, что три новых кейса не доезжают до платформы: роль ссылается на объекты, которых нет в фикстуре и которые не создаёт ни один навык (веб-сервис, внешний источник данных, перерасчёт), а фикстуры валидатора — это только каталог Roles/ без Configuration.xml. Объявлены skipPlatformVerify с причиной, чтобы пропуск был видимым, а не молчаливым. expect.filesAbsent внесён в таблицу ключей README: недокументированный ключ, который понимает только один раннер, даёт тихую дыру. Проверено: verify-snapshots на 8.3.27 — role-compile 13/0/1, role-validate 5/0/2; число пропусков сверено с expected-skips на обеих ОС и обоих портах. Co-Authored-By: Claude Opus 5 (1M context) --- tests/skills/README.md | 1 + .../cases/role-compile/nested-and-services.json | 3 ++- .../cases/role-validate/external-data-source.json | 12 +++++++++--- tests/skills/cases/role-validate/recalculation.json | 12 +++++++++--- 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/tests/skills/README.md b/tests/skills/README.md index 8e5ae84a..dde157df 100644 --- a/tests/skills/README.md +++ b/tests/skills/README.md @@ -299,6 +299,7 @@ ibcmd-проход автоматически `○ skipped`, если рядом | Ключ | Описание | |---|---| | `files` | Массив путей относительно `workDir` — каждый должен существовать после прогона | +| `filesAbsent` | Массив путей относительно `workDir` — ни одного не должно существовать. Работает и у негативного кейса: «отказ произошёл ДО записи» иначе проверить нечем | | `stdoutContains` | Строка или массив строк — все должны присутствовать в stdout | | `stdoutNotContains` | Строка или массив строк — ни одной не должно быть в stdout | | `stderrContains` | Строка или массив строк — все должны присутствовать в stderr. Для предупреждений: навык печатает их в stderr и продолжает, поэтому `expectError` тут не годится | diff --git a/tests/skills/cases/role-compile/nested-and-services.json b/tests/skills/cases/role-compile/nested-and-services.json index 340a083b..a091488b 100644 --- a/tests/skills/cases/role-compile/nested-and-services.json +++ b/tests/skills/cases/role-compile/nested-and-services.json @@ -21,5 +21,6 @@ "Roles/Интеграция/Ext/Rights.xml" ] }, - "skipValidation": true + "skipValidation": true, + "skipPlatformVerify": "роль ссылается на объекты, которых нет в пустой фикстуре и которые не создаёт ни один навык (веб-сервис, HTTP-сервис, сервис интеграции, внешний источник данных, перерасчёт); платформа отвергает такую конфигурацию по составу, а не по формату Rights.xml" } diff --git a/tests/skills/cases/role-validate/external-data-source.json b/tests/skills/cases/role-validate/external-data-source.json index 12486638..bb86e558 100644 --- a/tests/skills/cases/role-validate/external-data-source.json +++ b/tests/skills/cases/role-validate/external-data-source.json @@ -1,10 +1,16 @@ { "name": "Внешний источник данных: все уровни дерева проходят без замечаний", "setup": "fixture:external-data-source", - "params": { "rightsPath": "Roles/ПраваНаВнешнийИсточник/Ext/Rights.xml" }, + "params": { + "rightsPath": "Roles/ПраваНаВнешнийИсточник/Ext/Rights.xml" + }, "noSnapshot": "валидатор не пишет файлов, проверяется чистый вывод", "expect": { "stdoutContains": "Validation OK", - "stdoutNotContains": ["[WARN]", "[ERROR]"] - } + "stdoutNotContains": [ + "[WARN]", + "[ERROR]" + ] + }, + "skipPlatformVerify": "фикстура — только каталог Roles/ с эталонной выгрузкой роли, без Configuration.xml: загрузить её как конфигурацию нельзя, а объекты (внешний источник данных, перерасчёт) не создаёт ни один навык" } diff --git a/tests/skills/cases/role-validate/recalculation.json b/tests/skills/cases/role-validate/recalculation.json index 8b7316de..499fbda7 100644 --- a/tests/skills/cases/role-validate/recalculation.json +++ b/tests/skills/cases/role-validate/recalculation.json @@ -1,10 +1,16 @@ { "name": "Перерасчёт регистра расчёта проходит без замечаний", "setup": "fixture:external-data-source", - "params": { "rightsPath": "Roles/ПраваНаПерерасчет/Ext/Rights.xml" }, + "params": { + "rightsPath": "Roles/ПраваНаПерерасчет/Ext/Rights.xml" + }, "noSnapshot": "валидатор не пишет файлов, проверяется чистый вывод", "expect": { "stdoutContains": "Validation OK", - "stdoutNotContains": ["[WARN]", "[ERROR]"] - } + "stdoutNotContains": [ + "[WARN]", + "[ERROR]" + ] + }, + "skipPlatformVerify": "фикстура — только каталог Roles/ с эталонной выгрузкой роли, без Configuration.xml: загрузить её как конфигурацию нельзя, а объекты (внешний источник данных, перерасчёт) не создаёт ни один навык" }