test(role-compile,role-validate): платформенная верификация снапшотов и учёт пропусков

Прогон 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) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-08-13 20:38:00 +03:00
co-authored by Claude Opus 5
parent 9b0bff1386
commit 877fde8dd4
4 changed files with 21 additions and 7 deletions
+1
View File
@@ -299,6 +299,7 @@ ibcmd-проход автоматически `○ skipped`, если рядом
| Ключ | Описание | | Ключ | Описание |
|---|---| |---|---|
| `files` | Массив путей относительно `workDir` — каждый должен существовать после прогона | | `files` | Массив путей относительно `workDir` — каждый должен существовать после прогона |
| `filesAbsent` | Массив путей относительно `workDir` — ни одного не должно существовать. Работает и у негативного кейса: «отказ произошёл ДО записи» иначе проверить нечем |
| `stdoutContains` | Строка или массив строк — все должны присутствовать в stdout | | `stdoutContains` | Строка или массив строк — все должны присутствовать в stdout |
| `stdoutNotContains` | Строка или массив строк — ни одной не должно быть в stdout | | `stdoutNotContains` | Строка или массив строк — ни одной не должно быть в stdout |
| `stderrContains` | Строка или массив строк — все должны присутствовать в stderr. Для предупреждений: навык печатает их в stderr и продолжает, поэтому `expectError` тут не годится | | `stderrContains` | Строка или массив строк — все должны присутствовать в stderr. Для предупреждений: навык печатает их в stderr и продолжает, поэтому `expectError` тут не годится |
@@ -21,5 +21,6 @@
"Roles/Интеграция/Ext/Rights.xml" "Roles/Интеграция/Ext/Rights.xml"
] ]
}, },
"skipValidation": true "skipValidation": true,
"skipPlatformVerify": "роль ссылается на объекты, которых нет в пустой фикстуре и которые не создаёт ни один навык (веб-сервис, HTTP-сервис, сервис интеграции, внешний источник данных, перерасчёт); платформа отвергает такую конфигурацию по составу, а не по формату Rights.xml"
} }
@@ -1,10 +1,16 @@
{ {
"name": "Внешний источник данных: все уровни дерева проходят без замечаний", "name": "Внешний источник данных: все уровни дерева проходят без замечаний",
"setup": "fixture:external-data-source", "setup": "fixture:external-data-source",
"params": { "rightsPath": "Roles/ПраваНаВнешнийИсточник/Ext/Rights.xml" }, "params": {
"rightsPath": "Roles/ПраваНаВнешнийИсточник/Ext/Rights.xml"
},
"noSnapshot": "валидатор не пишет файлов, проверяется чистый вывод", "noSnapshot": "валидатор не пишет файлов, проверяется чистый вывод",
"expect": { "expect": {
"stdoutContains": "Validation OK", "stdoutContains": "Validation OK",
"stdoutNotContains": ["[WARN]", "[ERROR]"] "stdoutNotContains": [
} "[WARN]",
"[ERROR]"
]
},
"skipPlatformVerify": "фикстура — только каталог Roles/ с эталонной выгрузкой роли, без Configuration.xml: загрузить её как конфигурацию нельзя, а объекты (внешний источник данных, перерасчёт) не создаёт ни один навык"
} }
@@ -1,10 +1,16 @@
{ {
"name": "Перерасчёт регистра расчёта проходит без замечаний", "name": "Перерасчёт регистра расчёта проходит без замечаний",
"setup": "fixture:external-data-source", "setup": "fixture:external-data-source",
"params": { "rightsPath": "Roles/ПраваНаПерерасчет/Ext/Rights.xml" }, "params": {
"rightsPath": "Roles/ПраваНаПерерасчет/Ext/Rights.xml"
},
"noSnapshot": "валидатор не пишет файлов, проверяется чистый вывод", "noSnapshot": "валидатор не пишет файлов, проверяется чистый вывод",
"expect": { "expect": {
"stdoutContains": "Validation OK", "stdoutContains": "Validation OK",
"stdoutNotContains": ["[WARN]", "[ERROR]"] "stdoutNotContains": [
} "[WARN]",
"[ERROR]"
]
},
"skipPlatformVerify": "фикстура — только каталог Roles/ с эталонной выгрузкой роли, без Configuration.xml: загрузить её как конфигурацию нельзя, а объекты (внешний источник данных, перерасчёт) не создаёт ни один навык"
} }