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` — каждый должен существовать после прогона |
| `filesAbsent` | Массив путей относительно `workDir` — ни одного не должно существовать. Работает и у негативного кейса: «отказ произошёл ДО записи» иначе проверить нечем |
| `stdoutContains` | Строка или массив строк — все должны присутствовать в stdout |
| `stdoutNotContains` | Строка или массив строк — ни одной не должно быть в stdout |
| `stderrContains` | Строка или массив строк — все должны присутствовать в stderr. Для предупреждений: навык печатает их в stderr и продолжает, поэтому `expectError` тут не годится |
@@ -21,5 +21,6 @@
"Roles/Интеграция/Ext/Rights.xml"
]
},
"skipValidation": true
"skipValidation": true,
"skipPlatformVerify": "роль ссылается на объекты, которых нет в пустой фикстуре и которые не создаёт ни один навык (веб-сервис, HTTP-сервис, сервис интеграции, внешний источник данных, перерасчёт); платформа отвергает такую конфигурацию по составу, а не по формату Rights.xml"
}
@@ -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: загрузить её как конфигурацию нельзя, а объекты (внешний источник данных, перерасчёт) не создаёт ни один навык"
}
@@ -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: загрузить её как конфигурацию нельзя, а объекты (внешний источник данных, перерасчёт) не создаёт ни один навык"
}