Зачем: PR в Forgejo создать нельзя (нет API-токена), поэтому описание изменений, таблица green/red по ID с командами и фактическим выводом, итог N5 до/после, валидация CI и N13 лежат в репозитории рядом с тестами. Evidence перезаписаны финальным прогоном ./scripts/test/ci-local.sh, чтобы отчёт ссылался на те же числа, что в файлах (38 red / 9 green, храповик OK, format красный из-за F14). Число файлов F14 в комментарии ci.yml и в заметках уточнено до 23 по этому замеру.
669 lines
53 KiB
JSON
669 lines
53 KiB
JSON
{
|
||
"numTotalTestSuites": 10,
|
||
"numPassedTestSuites": 2,
|
||
"numFailedTestSuites": 8,
|
||
"numPendingTestSuites": 0,
|
||
"numTotalTests": 47,
|
||
"numPassedTests": 9,
|
||
"numFailedTests": 38,
|
||
"numPendingTests": 0,
|
||
"numTodoTests": 0,
|
||
"snapshot": {
|
||
"added": 0,
|
||
"failure": false,
|
||
"filesAdded": 0,
|
||
"filesRemoved": 0,
|
||
"filesRemovedList": [],
|
||
"filesUnmatched": 0,
|
||
"filesUpdated": 0,
|
||
"matched": 0,
|
||
"total": 0,
|
||
"unchecked": 0,
|
||
"uncheckedKeysByFile": [],
|
||
"unmatched": 0,
|
||
"updated": 0,
|
||
"didUpdate": false
|
||
},
|
||
"startTime": 1790408012144,
|
||
"success": false,
|
||
"testResults": [
|
||
{
|
||
"assertionResults": [
|
||
{
|
||
"ancestorTitles": ["HARNESS: реальный сервер + PostgreSQL 17"],
|
||
"fullName": "HARNESS: реальный сервер + PostgreSQL 17 [HARNESS] сервер отвечает live/ready (ready проверяет БД)",
|
||
"status": "passed",
|
||
"title": "[HARNESS] сервер отвечает live/ready (ready проверяет БД)",
|
||
"duration": 32.192098,
|
||
"failureMessages": [],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["HARNESS: реальный сервер + PostgreSQL 17"],
|
||
"fullName": "HARNESS: реальный сервер + PostgreSQL 17 [HARNESS] БД: PostgreSQL 17, приложение под ролью без SUPERUSER/BYPASSRLS, мигратор без SUPERUSER",
|
||
"status": "passed",
|
||
"title": "[HARNESS] БД: PostgreSQL 17, приложение под ролью без SUPERUSER/BYPASSRLS, мигратор без SUPERUSER",
|
||
"duration": 14.342552000000012,
|
||
"failureMessages": [],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["HARNESS: реальный сервер + PostgreSQL 17"],
|
||
"fullName": "HARNESS: реальный сервер + PostgreSQL 17 [HARNESS] миграции применены мигратором, app-роль не видит schema_migrations",
|
||
"status": "passed",
|
||
"title": "[HARNESS] миграции применены мигратором, app-роль не видит schema_migrations",
|
||
"duration": 14.26604900000001,
|
||
"failureMessages": [],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["HARNESS: реальный сервер + PostgreSQL 17"],
|
||
"fullName": "HARNESS: реальный сервер + PostgreSQL 17 [HARNESS] токены: без токена 401, случайный токен 401, manager-токен 200",
|
||
"status": "passed",
|
||
"title": "[HARNESS] токены: без токена 401, случайный токен 401, manager-токен 200",
|
||
"duration": 13.863121000000007,
|
||
"failureMessages": [],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["HARNESS: реальный сервер + PostgreSQL 17"],
|
||
"fullName": "HARNESS: реальный сервер + PostgreSQL 17 [HARNESS] терминал: отметка сотрудника из импорта принимается (201)",
|
||
"status": "passed",
|
||
"title": "[HARNESS] терминал: отметка сотрудника из импорта принимается (201)",
|
||
"duration": 24.62379200000001,
|
||
"failureMessages": [],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["HARNESS: реальный сервер + PostgreSQL 17"],
|
||
"fullName": "HARNESS: реальный сервер + PostgreSQL 17 [CTRL] RBAC: терминал не видит портал и не создаёт сотрудников; сотрудник видит только себя",
|
||
"status": "passed",
|
||
"title": "[CTRL] RBAC: терминал не видит портал и не создаёт сотрудников; сотрудник видит только себя",
|
||
"duration": 23.691180000000003,
|
||
"failureMessages": [],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["HARNESS: реальный сервер + PostgreSQL 17"],
|
||
"fullName": "HARNESS: реальный сервер + PostgreSQL 17 [CTRL] уволенный сотрудник теряет доступ (401)",
|
||
"status": "passed",
|
||
"title": "[CTRL] уволенный сотрудник теряет доступ (401)",
|
||
"duration": 23.254977999999994,
|
||
"failureMessages": [],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
}
|
||
],
|
||
"startTime": 1790408019083,
|
||
"endTime": 1790408019229.255,
|
||
"status": "passed",
|
||
"message": "",
|
||
"name": "/workspace/krona-staff/tests/e2e/00-harness.e2e.ts"
|
||
},
|
||
{
|
||
"assertionResults": [
|
||
{
|
||
"ancestorTitles": ["Основной API на реальной PostgreSQL"],
|
||
"fullName": "Основной API на реальной PostgreSQL [N1] менеджер создаёт сотрудника через POST /employees → 201",
|
||
"status": "failed",
|
||
"title": "[N1] менеджер создаёт сотрудника через POST /employees → 201",
|
||
"duration": 38.316193,
|
||
"failureMessages": [
|
||
"AssertionError: HTTP 500 {\"statusCode\":500,\"code\":\"42P08\",\"error\":\"Internal Server Error\",\"message\":\"inconsistent types deduced for parameter $2\"}: expected 500 to be 201 // Object.is equality\n at /workspace/krona-staff/tests/e2e/10-core-defects.e2e.ts:55:57\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Основной API на реальной PostgreSQL"],
|
||
"fullName": "Основной API на реальной PostgreSQL [N2] подтверждение смены, расчёт и утверждение зарплаты проходят (200) и начисляют 8 ч × ставка",
|
||
"status": "failed",
|
||
"title": "[N2] подтверждение смены, расчёт и утверждение зарплаты проходят (200) и начисляют 8 ч × ставка",
|
||
"duration": 110.697531,
|
||
"failureMessages": [
|
||
"AssertionError: подтверждение смены: HTTP 500 {\"statusCode\":500,\"code\":\"23502\",\"error\":\"Internal Server Error\",\"message\":\"null value in column \\\"occurred_at\\\" of relation \\\"staff_outbox\\\" violates not-null constraint\"}: expected 500 to be 200 // Object.is equality\n at /workspace/krona-staff/tests/e2e/10-core-defects.e2e.ts:73:81\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Основной API на реальной PostgreSQL"],
|
||
"fullName": "Основной API на реальной PostgreSQL [N4] пересекающиеся расчёты не начисляют одну смену дважды",
|
||
"status": "failed",
|
||
"title": "[N4] пересекающиеся расчёты не начисляют одну смену дважды",
|
||
"duration": 66.33918700000004,
|
||
"failureMessages": [
|
||
"AssertionError: подтверждение смены (предусловие, см. N2): HTTP 500 {\"statusCode\":500,\"code\":\"23502\",\"error\":\"Internal Server Error\",\"message\":\"null value in column \\\"occurred_at\\\" of relation \\\"staff_outbox\\\" violates not-null constraint\"}: expected 500 to be 200 // Object.is equality\n at /workspace/krona-staff/tests/e2e/10-core-defects.e2e.ts:104:7\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Основной API на реальной PostgreSQL"],
|
||
"fullName": "Основной API на реальной PostgreSQL [N3] push-подписка на внутренний адрес отклоняется, сервер не подключается к 127.0.0.1",
|
||
"status": "failed",
|
||
"title": "[N3] push-подписка на внутренний адрес отклоняется, сервер не подключается к 127.0.0.1",
|
||
"duration": 2544.330582,
|
||
"failureMessages": [
|
||
"AssertionError: подписка: HTTP 201 {\"id\":\"01M3EA4FH3FG4Q3YEKXYQ8Y4Q5\",\"endpoint\":\"https://127.0.0.1:36027/e2e-internal-admin\"}: expected { status: 201, connections: 1 } to deeply equal { status: toSatisfy{…}, …(1) }\n at /workspace/krona-staff/tests/e2e/10-core-defects.e2e.ts:161:9\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Основной API на реальной PostgreSQL"],
|
||
"fullName": "Основной API на реальной PostgreSQL [N9] чужой push-endpoint нельзя перепривязать к другому сотруднику",
|
||
"status": "failed",
|
||
"title": "[N9] чужой push-endpoint нельзя перепривязать к другому сотруднику",
|
||
"duration": 44.48753099999976,
|
||
"failureMessages": [
|
||
"AssertionError: HTTP 201 {\"id\":\"01M3EA4J0JSPFRDF22J6E2CEY1\",\"endpoint\":\"https://fcm.googleapis.com/fcm/send/e2e-d464594734e6ddf8569ec571f5832dbf\"}: expected { status: 201, …(1) } to deeply equal { status: toSatisfy{…}, …(1) }\n at /workspace/krona-staff/tests/e2e/10-core-defects.e2e.ts:191:7\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Основной API на реальной PostgreSQL"],
|
||
"fullName": "Основной API на реальной PostgreSQL [N12] PUT pay-assignment отвергает лишние поля и нереальные суммы (400)",
|
||
"status": "failed",
|
||
"title": "[N12] PUT pay-assignment отвергает лишние поля и нереальные суммы (400)",
|
||
"duration": 31.35817700000007,
|
||
"failureMessages": [
|
||
"AssertionError: HTTP 200 {\"id\":\"01M3EA4J1PHXWHFMAMYYVRMK3E\",\"employee_id\":\"01M3EA4J151B1H9D5AKAR29AN9\",\"org_unit_id\":null,\"pay_rule_id\":\"01M3EA4FCDRQSS6V8H5Q6XS615\",\"pay_rule_code\":\"hourly\",\"pay_rule_name\":\"Почасовая (стажёр, дополнительный сотрудник)\",\"rate_minor\":12345,\"percent_bp\":0,\"guarantee_minor\":0,\"pool_weight_bp\":0… | HTTP 200 {\"id\":\"01M3EA4J1PHXWHFMAMYYVRMK3E\",\"employee_id\":\"01M3EA4J151B1H9D5AKAR29AN9\",\"org_unit_id\":null,\"pay_rule_id\":\"01M3EA4FCDRQSS6V8H5Q6XS615\",\"pay_rule_code\":\"hourly\",\"pay_rule_name\":\"Почасовая (стажёр, дополнительный сотрудник)\",\"rate_minor\":9007199254740991,\"percent_bp\":0,\"guarantee_minor\":900719925…: expected { extra: 200, huge: 200 } to deeply equal { extra: 400, huge: 400 }\n at /workspace/krona-staff/tests/e2e/10-core-defects.e2e.ts:215:7\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Основной API на реальной PostgreSQL"],
|
||
"fullName": "Основной API на реальной PostgreSQL [N10] терминальный токен не читает справочники профессий и точек (403)",
|
||
"status": "failed",
|
||
"title": "[N10] терминальный токен не читает справочники профессий и точек (403)",
|
||
"duration": 4.364047000000028,
|
||
"failureMessages": [
|
||
"AssertionError: expected { professions: 200, units: 200 } to deeply equal { professions: 403, units: 403 }\n at /workspace/krona-staff/tests/e2e/10-core-defects.e2e.ts:224:70\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Основной API на реальной PostgreSQL"],
|
||
"fullName": "Основной API на реальной PostgreSQL [F2] standalone без токенов не выдаёт права менеджера анонимному запросу (401)",
|
||
"status": "failed",
|
||
"title": "[F2] standalone без токенов не выдаёт права менеджера анонимному запросу (401)",
|
||
"duration": 19.630533999999898,
|
||
"failureMessages": [
|
||
"AssertionError: expected { portal: 200, payroll: 200, …(1) } to deeply equal { portal: 401, payroll: 401, …(1) }\n at /workspace/krona-staff/tests/e2e/10-core-defects.e2e.ts:237:85\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Основной API на реальной PostgreSQL"],
|
||
"fullName": "Основной API на реальной PostgreSQL [F3] cookie сессии не содержит сырой токен и отзывается при выходе",
|
||
"status": "failed",
|
||
"title": "[F3] cookie сессии не содержит сырой токен и отзывается при выходе",
|
||
"duration": 8.088321000000178,
|
||
"failureMessages": [
|
||
"AssertionError: expected { rawTokenInCookie: true, …(1) } to deeply equal { rawTokenInCookie: false, …(1) }\n at /workspace/krona-staff/tests/e2e/10-core-defects.e2e.ts:255:91\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Основной API на реальной PostgreSQL"],
|
||
"fullName": "Основной API на реальной PostgreSQL [F10] мутация по cookie без Origin отклоняется (CSRF, 403)",
|
||
"status": "failed",
|
||
"title": "[F10] мутация по cookie без Origin отклоняется (CSRF, 403)",
|
||
"duration": 5.457843000000139,
|
||
"failureMessages": [
|
||
"AssertionError: HTTP 201 {\"id\":\"01M3EA4J31CEM99Y9708PNVE90\",\"code\":\"profession-01m3ea4j31cem99y9708pnve90\",\"name\":\"E2E-CSRF-профессия-c30803\",\"status\":\"active\"}: expected 201 to be 403 // Object.is equality\n at /workspace/krona-staff/tests/e2e/10-core-defects.e2e.ts:269:57\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Основной API на реальной PostgreSQL"],
|
||
"fullName": "Основной API на реальной PostgreSQL [F7] повтор Idempotency-Key с другим телом не создаёт второе событие",
|
||
"status": "failed",
|
||
"title": "[F7] повтор Idempotency-Key с другим телом не создаёт второе событие",
|
||
"duration": 31.478251999999884,
|
||
"failureMessages": [
|
||
"AssertionError: expected { first: 201, secondCreated: true } to deeply equal { first: 201, secondCreated: false }\n at /workspace/krona-staff/tests/e2e/10-core-defects.e2e.ts:288:75\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Основной API на реальной PostgreSQL"],
|
||
"fullName": "Основной API на реальной PostgreSQL [N11] импорт с неверным kind начисления → 400, а не 500",
|
||
"status": "failed",
|
||
"title": "[N11] импорт с неверным kind начисления → 400, а не 500",
|
||
"duration": 24.907294000000093,
|
||
"failureMessages": [
|
||
"AssertionError: HTTP 500 {\"statusCode\":500,\"code\":\"23514\",\"error\":\"Internal Server Error\",\"message\":\"new row for relation \\\"staff_payroll_ledger\\\" violates check constraint \\\"staff_payroll_ledger_kind_check\\\"\"}: expected 500 to be 400 // Object.is equality\n at /workspace/krona-staff/tests/e2e/10-core-defects.e2e.ts:311:57\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Основной API на реальной PostgreSQL"],
|
||
"fullName": "Основной API на реальной PostgreSQL [F4] перебор ключей входа ограничивается (429 не позже 30 неверных попыток)",
|
||
"status": "failed",
|
||
"title": "[F4] перебор ключей входа ограничивается (429 не позже 30 неверных попыток)",
|
||
"duration": 75.38818200000014,
|
||
"failureMessages": [
|
||
"AssertionError: статусы: 401: expected false to be true // Object.is equality\n at /workspace/krona-staff/tests/e2e/10-core-defects.e2e.ts:324:84\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
}
|
||
],
|
||
"startTime": 1790408015147,
|
||
"endTime": 1790408018151.3882,
|
||
"status": "failed",
|
||
"message": "",
|
||
"name": "/workspace/krona-staff/tests/e2e/10-core-defects.e2e.ts"
|
||
},
|
||
{
|
||
"assertionResults": [
|
||
{
|
||
"ancestorTitles": ["Офлайн-синхронизация на реальной PostgreSQL"],
|
||
"fullName": "Офлайн-синхронизация на реальной PostgreSQL [SYNC-A] устройство не может само подтвердить смену (status=confirmed отклоняется)",
|
||
"status": "failed",
|
||
"title": "[SYNC-A] устройство не может само подтвердить смену (status=confirmed отклоняется)",
|
||
"duration": 86.95440500000001,
|
||
"failureMessages": [
|
||
"AssertionError: HTTP 200 {\"results\":[{\"idempotency_key\":\"e2e-01M3EA4JPXC3E39GZMHFH33H92\",\"command_type\":\"upsert_work_session\",\"status\":\"applied\",\"result\":{\"id\":\"01M3EA4JPXQPVQDPGEA3YVFPXV\",\"revision\":1,\"status\":\"applied\"}}]}: expected { http: 200, result: 'applied', …(1) } to deeply equal { http: 200, result: 'rejected', …(1) }\n at /workspace/krona-staff/tests/e2e/20-sync-defects.e2e.ts:86:7\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Офлайн-синхронизация на реальной PostgreSQL"],
|
||
"fullName": "Офлайн-синхронизация на реальной PostgreSQL [SYNC-B] устройство не может утвердить табель (status=approved отклоняется)",
|
||
"status": "failed",
|
||
"title": "[SYNC-B] устройство не может утвердить табель (status=approved отклоняется)",
|
||
"duration": 32.361658000000006,
|
||
"failureMessages": [
|
||
"AssertionError: HTTP 200 {\"results\":[{\"idempotency_key\":\"e2e-01M3EA4JR4CST4PE643FC043K9\",\"command_type\":\"upsert_timesheet_entry\",\"status\":\"applied\",\"result\":{\"id\":\"01M3EA4JR43V65BMVJVX5DHSV0\",\"revision\":1,\"status\":\"applied\"}}]}: expected { result: 'applied', …(1) } to deeply equal { result: 'rejected', stored: null }\n at /workspace/krona-staff/tests/e2e/20-sync-defects.e2e.ts:109:7\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Офлайн-синхронизация на реальной PostgreSQL"],
|
||
"fullName": "Офлайн-синхронизация на реальной PostgreSQL [SYNC-C0] начальная загрузка (pull без курсора) работает на реальной БД (200)",
|
||
"status": "failed",
|
||
"title": "[SYNC-C0] начальная загрузка (pull без курсора) работает на реальной БД (200)",
|
||
"duration": 39.13565999999997,
|
||
"failureMessages": [
|
||
"AssertionError: HTTP 500 {\"statusCode\":500,\"code\":\"42703\",\"error\":\"Internal Server Error\",\"message\":\"column \\\"status\\\" does not exist\"}: expected 500 to be 200 // Object.is equality\n at /workspace/krona-staff/tests/e2e/20-sync-defects.e2e.ts:120:57\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Офлайн-синхронизация на реальной PostgreSQL"],
|
||
"fullName": "Офлайн-синхронизация на реальной PostgreSQL [SYNC-C] начальная загрузка >100 сущностей отдаёт все сущности постранично",
|
||
"status": "failed",
|
||
"title": "[SYNC-C] начальная загрузка >100 сущностей отдаёт все сущности постранично",
|
||
"duration": 54.852048000000025,
|
||
"failureMessages": [
|
||
"AssertionError: HTTP 500 {\"statusCode\":500,\"code\":\"42703\",\"error\":\"Internal Server Error\",\"message\":\"column \\\"status\\\" does not exist\"}: expected 500 to be 200 // Object.is equality\n at pullAll (/workspace/krona-staff/tests/e2e/20-sync-defects.e2e.ts:51:57)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at /workspace/krona-staff/tests/e2e/20-sync-defects.e2e.ts:130:25\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Офлайн-синхронизация на реальной PostgreSQL"],
|
||
"fullName": "Офлайн-синхронизация на реальной PostgreSQL [SYNC-D] изменения, сделанные через портал, попадают в инкрементальный pull",
|
||
"status": "failed",
|
||
"title": "[SYNC-D] изменения, сделанные через портал, попадают в инкрементальный pull",
|
||
"duration": 40.97763200000003,
|
||
"failureMessages": [
|
||
"AssertionError: expected false to be true // Object.is equality\n at /workspace/krona-staff/tests/e2e/20-sync-defects.e2e.ts:151:95\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Офлайн-синхронизация на реальной PostgreSQL"],
|
||
"fullName": "Офлайн-синхронизация на реальной PostgreSQL [SYNC-E] отметка уволенного сотрудника через sync отклоняется",
|
||
"status": "failed",
|
||
"title": "[SYNC-E] отметка уволенного сотрудника через sync отклоняется",
|
||
"duration": 23.937388999999996,
|
||
"failureMessages": [
|
||
"AssertionError: HTTP 200 {\"results\":[{\"idempotency_key\":\"e2e-01M3EA4JXB10Y1W7WAT3QXPJXR\",\"command_type\":\"attendance_event\",\"status\":\"applied\",\"result\":{\"event_id\":\"01M3EA4JXD7TMSBAMMAK6HMXK2\",\"status\":\"accepted\"}}]}: expected 'applied' to be 'rejected' // Object.is equality\n at /workspace/krona-staff/tests/e2e/20-sync-defects.e2e.ts:171:77\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Офлайн-синхронизация на реальной PostgreSQL"],
|
||
"fullName": "Офлайн-синхронизация на реальной PostgreSQL [SYNC-F] отметка через sync сохраняет точку устройства; чужая точка в payload отклоняется",
|
||
"status": "failed",
|
||
"title": "[SYNC-F] отметка через sync сохраняет точку устройства; чужая точка в payload отклоняется",
|
||
"duration": 42.41749800000002,
|
||
"failureMessages": [
|
||
"AssertionError: HTTP 200 {\"results\":[{\"idempotency_key\":\"e2e-01M3EA4JYFDZ0AAZYVEF6G72T2\",\"command_type\":\"attendance_event\",\"status\":\"applied\",\"result\":{\"event_id\":\"01M3EA4JYH12S10KQ4NWN232FM\",\"status\":\"accepted\"}},{\"idempotency_key\":\"e2e-01M3EA4JYFDXJXPH923SG1E832\",\"command_type\":\"attendance_event\",\"status\":\"applied\",\"resul…: expected { Object (ownOrgUnit, foreign) } to deeply equal { …(2) }\n at /workspace/krona-staff/tests/e2e/20-sync-defects.e2e.ts:202:7\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Офлайн-синхронизация на реальной PostgreSQL"],
|
||
"fullName": "Офлайн-синхронизация на реальной PostgreSQL [SYNC-G] битая команда в пакете отклоняется по отдельности, остальные применяются (не 500)",
|
||
"status": "failed",
|
||
"title": "[SYNC-G] битая команда в пакете отклоняется по отдельности, остальные применяются (не 500)",
|
||
"duration": 20.59652299999999,
|
||
"failureMessages": [
|
||
"AssertionError: HTTP 500 {\"statusCode\":500,\"code\":\"22007\",\"error\":\"Internal Server Error\",\"message\":\"invalid input syntax for type timestamp with time zone: \\\"e2e-not-a-timestamp\\\"\"}: expected { http: 500, statuses: [] } to deeply equal { http: 200, statuses: [ …(2) ] }\n at /workspace/krona-staff/tests/e2e/20-sync-defects.e2e.ts:225:7\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Офлайн-синхронизация на реальной PostgreSQL"],
|
||
"fullName": "Офлайн-синхронизация на реальной PostgreSQL [SYNC-H] регистрация устройства по cookie с чужим Origin отклоняется (CSRF, 403)",
|
||
"status": "failed",
|
||
"title": "[SYNC-H] регистрация устройства по cookie с чужим Origin отклоняется (CSRF, 403)",
|
||
"duration": 9.081312000000025,
|
||
"failureMessages": [
|
||
"AssertionError: HTTP 201 {\"device\":{\"id\":\"01M3EA4JZKVD04KCMNCGGW1EAH\",\"tenant_id\":\"01M3EA4DJNEY3HRCYSBSX43XW0\",\"device_code\":\"E2E-5J7EDPFQV6\",\"name\":\"E2E-CSRF-терминал-34e01a\",\"token_hint\":\"kstaff_dev_01M3E\",\"status\":\"active\",\"allowed_scopes\":[\"attendance:sync\"],\"registered_at\":\"2026-09-26T07:33:38.935Z\",\"created_by\":\"01M3E…: expected 201 to be 403 // Object.is equality\n at /workspace/krona-staff/tests/e2e/20-sync-defects.e2e.ts:236:57\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Офлайн-синхронизация на реальной PostgreSQL"],
|
||
"fullName": "Офлайн-синхронизация на реальной PostgreSQL [SYNC-I] без настроенных токенов анонимный запрос не регистрирует устройство (401)",
|
||
"status": "failed",
|
||
"title": "[SYNC-I] без настроенных токенов анонимный запрос не регистрирует устройство (401)",
|
||
"duration": 6.548922000000005,
|
||
"failureMessages": [
|
||
"AssertionError: HTTP 201 {\"device\":{\"id\":\"01M3EA4JZWQF4S3SXWCX77J9ST\",\"tenant_id\":\"01M3EA4DJNEY3HRCYSBSX43XW0\",\"device_code\":\"E2E-KS5GF18F83\",\"name\":\"E2E-Анонимный терминал-75d36d\",\"token_hint\":\"kstaff_dev_01M3E\",\"status\":\"active\",\"allowed_scopes\":[\"attendance:sync\"],\"registered_at\":\"2026-09-26T07:33:38.940Z\",\"created_by\":\"…: expected 201 to be 401 // Object.is equality\n at /workspace/krona-staff/tests/e2e/20-sync-defects.e2e.ts:247:57\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Офлайн-синхронизация на реальной PostgreSQL"],
|
||
"fullName": "Офлайн-синхронизация на реальной PostgreSQL [SYNC-J] отметка через sync вне окна времени (2001 год) отклоняется, как в POST /attendance/events",
|
||
"status": "failed",
|
||
"title": "[SYNC-J] отметка через sync вне окна времени (2001 год) отклоняется, как в POST /attendance/events",
|
||
"duration": 23.565251999999987,
|
||
"failureMessages": [
|
||
"AssertionError: HTTP 200 {\"results\":[{\"idempotency_key\":\"e2e-01M3EA4K0JQNMDJTDAM1PZ1J8K\",\"command_type\":\"attendance_event\",\"status\":\"applied\",\"result\":{\"event_id\":\"01M3EA4K0NB5RS8GACHWC7N2C2\",\"status\":\"accepted\"}}]}: expected 'applied' to be 'rejected' // Object.is equality\n at /workspace/krona-staff/tests/e2e/20-sync-defects.e2e.ts:260:77\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Офлайн-синхронизация на реальной PostgreSQL"],
|
||
"fullName": "Офлайн-синхронизация на реальной PostgreSQL [SYNC-K] ack курсора из будущего (больше выданного сервером) отклоняется (400)",
|
||
"status": "failed",
|
||
"title": "[SYNC-K] ack курсора из будущего (больше выданного сервером) отклоняется (400)",
|
||
"duration": 6.953785000000039,
|
||
"failureMessages": [
|
||
"AssertionError: HTTP 200 {\"acknowledged\":true,\"cursor\":\"cur_999999999_fd163ccb01a6\",\"acknowledged_at\":\"2026-09-26T07:33:38.972Z\"}: expected 200 to be 400 // Object.is equality\n at /workspace/krona-staff/tests/e2e/20-sync-defects.e2e.ts:275:57\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Офлайн-синхронизация на реальной PostgreSQL"],
|
||
"fullName": "Офлайн-синхронизация на реальной PostgreSQL [SYNC-L] отозванное устройство не может синхронизироваться (403) — позитивный контроль",
|
||
"status": "passed",
|
||
"title": "[SYNC-L] отозванное устройство не может синхронизироваться (403) — позитивный контроль",
|
||
"duration": 8.451247999999964,
|
||
"failureMessages": [],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
}
|
||
],
|
||
"startTime": 1790408018587,
|
||
"endTime": 1790408018982.4512,
|
||
"status": "failed",
|
||
"message": "",
|
||
"name": "/workspace/krona-staff/tests/e2e/20-sync-defects.e2e.ts"
|
||
},
|
||
{
|
||
"assertionResults": [
|
||
{
|
||
"ancestorTitles": ["Решения владельца: роли, пакеты зарплаты, согласие на биометрию"],
|
||
"fullName": "Решения владельца: роли, пакеты зарплаты, согласие на биометрию [OWN-01] менеджер точки A запускает расчёт для точки B → 403",
|
||
"status": "failed",
|
||
"title": "[OWN-01] менеджер точки A запускает расчёт для точки B → 403",
|
||
"duration": 109.84663699999999,
|
||
"failureMessages": [
|
||
"AssertionError: C1 POST /access-grants (point_manager): HTTP 404 {\"message\":\"Route POST:/api/v1/staff/access-grants not found\",\"error\":\"Not Found\",\"statusCode\":404}: expected 404 to be 201 // Object.is equality\n at grant (/workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:28:94)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at /workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:94:22\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Решения владельца: роли, пакеты зарплаты, согласие на биометрию"],
|
||
"fullName": "Решения владельца: роли, пакеты зарплаты, согласие на биометрию [OWN-02] менеджер точки отправляет пакет на согласование → 403",
|
||
"status": "failed",
|
||
"title": "[OWN-02] менеджер точки отправляет пакет на согласование → 403",
|
||
"duration": 64.021771,
|
||
"failureMessages": [
|
||
"AssertionError: C1 POST /access-grants (point_manager): HTTP 404 {\"message\":\"Route POST:/api/v1/staff/access-grants not found\",\"error\":\"Not Found\",\"statusCode\":404}: expected 404 to be 201 // Object.is equality\n at grant (/workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:28:94)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at /workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:105:22\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Решения владельца: роли, пакеты зарплаты, согласие на биометрию"],
|
||
"fullName": "Решения владельца: роли, пакеты зарплаты, согласие на биометрию [OWN-03] бухгалтер отправляет пакет → успех, каждый директор получает ровно одно уведомление",
|
||
"status": "failed",
|
||
"title": "[OWN-03] бухгалтер отправляет пакет → успех, каждый директор получает ровно одно уведомление",
|
||
"duration": 1.5183850000000234,
|
||
"failureMessages": [
|
||
"AssertionError: C1 POST /access-grants (accountant): HTTP 404 {\"message\":\"Route POST:/api/v1/staff/access-grants not found\",\"error\":\"Not Found\",\"statusCode\":404}: expected 404 to be 201 // Object.is equality\n at grant (/workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:28:94)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at /workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:118:24\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Решения владельца: роли, пакеты зарплаты, согласие на биометрию"],
|
||
"fullName": "Решения владельца: роли, пакеты зарплаты, согласие на биометрию [OWN-04] бухгалтер пытается подписать пакет → 403",
|
||
"status": "failed",
|
||
"title": "[OWN-04] бухгалтер пытается подписать пакет → 403",
|
||
"duration": 1.8508840000000077,
|
||
"failureMessages": [
|
||
"AssertionError: C1 POST /access-grants (accountant): HTTP 404 {\"message\":\"Route POST:/api/v1/staff/access-grants not found\",\"error\":\"Not Found\",\"statusCode\":404}: expected 404 to be 201 // Object.is equality\n at grant (/workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:28:94)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at /workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:133:24\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Решения владельца: роли, пакеты зарплаты, согласие на биометрию"],
|
||
"fullName": "Решения владельца: роли, пакеты зарплаты, согласие на биометрию [OWN-05] до подписи директора в ledger нет начислений и выплат",
|
||
"status": "failed",
|
||
"title": "[OWN-05] до подписи директора в ledger нет начислений и выплат",
|
||
"duration": 1.9114280000000008,
|
||
"failureMessages": [
|
||
"AssertionError: C1 POST /access-grants (accountant): HTTP 404 {\"message\":\"Route POST:/api/v1/staff/access-grants not found\",\"error\":\"Not Found\",\"statusCode\":404}: expected 404 to be 201 // Object.is equality\n at grant (/workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:28:94)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at /workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:141:24\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Решения владельца: роли, пакеты зарплаты, согласие на биометрию"],
|
||
"fullName": "Решения владельца: роли, пакеты зарплаты, согласие на биометрию [OWN-06] подпись директора → начисления и выплаты в ledger, пакет и смены неизменяемы",
|
||
"status": "failed",
|
||
"title": "[OWN-06] подпись директора → начисления и выплаты в ledger, пакет и смены неизменяемы",
|
||
"duration": 1.5373430000000212,
|
||
"failureMessages": [
|
||
"AssertionError: C1 POST /access-grants (accountant): HTTP 404 {\"message\":\"Route POST:/api/v1/staff/access-grants not found\",\"error\":\"Not Found\",\"statusCode\":404}: expected 404 to be 201 // Object.is equality\n at grant (/workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:28:94)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at /workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:148:24\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Решения владельца: роли, пакеты зарплаты, согласие на биометрию"],
|
||
"fullName": "Решения владельца: роли, пакеты зарплаты, согласие на биометрию [OWN-07] смена изменена после отправки → подписать нельзя (409), пакет возвращён бухгалтеру",
|
||
"status": "failed",
|
||
"title": "[OWN-07] смена изменена после отправки → подписать нельзя (409), пакет возвращён бухгалтеру",
|
||
"duration": 1.4993349999999737,
|
||
"failureMessages": [
|
||
"AssertionError: C1 POST /access-grants (accountant): HTTP 404 {\"message\":\"Route POST:/api/v1/staff/access-grants not found\",\"error\":\"Not Found\",\"statusCode\":404}: expected 404 to be 201 // Object.is equality\n at grant (/workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:28:94)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at /workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:173:24\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Решения владельца: роли, пакеты зарплаты, согласие на биометрию"],
|
||
"fullName": "Решения владельца: роли, пакеты зарплаты, согласие на биометрию [OWN-08] возврат с комментарием → пакет у бухгалтера, комментарий сохранён",
|
||
"status": "failed",
|
||
"title": "[OWN-08] возврат с комментарием → пакет у бухгалтера, комментарий сохранён",
|
||
"duration": 2.188139000000035,
|
||
"failureMessages": [
|
||
"AssertionError: C1 POST /access-grants (accountant): HTTP 404 {\"message\":\"Route POST:/api/v1/staff/access-grants not found\",\"error\":\"Not Found\",\"statusCode\":404}: expected 404 to be 201 // Object.is equality\n at grant (/workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:28:94)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at /workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:195:24\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Решения владельца: роли, пакеты зарплаты, согласие на биометрию"],
|
||
"fullName": "Решения владельца: роли, пакеты зарплаты, согласие на биометрию [OWN-09] сотрудник точки A отработал смену в точке B → смена попадает в зарплату точки B",
|
||
"status": "failed",
|
||
"title": "[OWN-09] сотрудник точки A отработал смену в точке B → смена попадает в зарплату точки B",
|
||
"duration": 2.2691649999999868,
|
||
"failureMessages": [
|
||
"AssertionError: C1 POST /access-grants (accountant): HTTP 404 {\"message\":\"Route POST:/api/v1/staff/access-grants not found\",\"error\":\"Not Found\",\"statusCode\":404}: expected 404 to be 201 // Object.is equality\n at grant (/workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:28:94)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at /workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:213:24\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Решения владельца: роли, пакеты зарплаты, согласие на биометрию"],
|
||
"fullName": "Решения владельца: роли, пакеты зарплаты, согласие на биометрию [OWN-10] сотрудник без согласия на биометрию → сервер сообщает терминалу «регистрация запрещена»",
|
||
"status": "failed",
|
||
"title": "[OWN-10] сотрудник без согласия на биометрию → сервер сообщает терминалу «регистрация запрещена»",
|
||
"duration": 15.068132999999989,
|
||
"failureMessages": [
|
||
"AssertionError: C3: HTTP 404 {\"message\":\"Route GET:/api/v1/staff/terminal/employees/01M3EA4JGPPB7M0G78QQBQBJ1M/enrollment not found\",\"error\":\"Not Found\",\"statusCode\":404}: expected 404 to be 200 // Object.is equality\n at /workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:241:66\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["Решения владельца: роли, пакеты зарплаты, согласие на биометрию"],
|
||
"fullName": "Решения владельца: роли, пакеты зарплаты, согласие на биометрию [OWN-11] согласие отозвано → статус для терминала меняется",
|
||
"status": "failed",
|
||
"title": "[OWN-11] согласие отозвано → статус для терминала меняется",
|
||
"duration": 14.774637000000041,
|
||
"failureMessages": [
|
||
"AssertionError: C3 PUT biometric-consent: HTTP 404 {\"message\":\"Route PUT:/api/v1/staff/employees/01M3EA4JH57XZ361XBC2Z7SA6J/biometric-consent not found\",\"error\":\"Not Found\",\"statusCode\":404}: expected 404 to be 200 // Object.is equality\n at /workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts:255:86\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:20"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
}
|
||
],
|
||
"startTime": 1790408018262,
|
||
"endTime": 1790408018478.7747,
|
||
"status": "failed",
|
||
"message": "",
|
||
"name": "/workspace/krona-staff/tests/e2e/30-owner-decisions.e2e.ts"
|
||
},
|
||
{
|
||
"assertionResults": [
|
||
{
|
||
"ancestorTitles": ["deploy/pilot/compose.yaml"],
|
||
"fullName": "deploy/pilot/compose.yaml [PILOT-1] все подставляемые переменные обязательны: ${VAR:?сообщение}",
|
||
"status": "failed",
|
||
"title": "[PILOT-1] все подставляемые переменные обязательны: ${VAR:?сообщение}",
|
||
"duration": 5.8893739999999895,
|
||
"failureMessages": [
|
||
"AssertionError: переменные без :? — пустое значение молча попадёт в контейнер: expected [ 'STANDALONE_MANAGER_TOKEN', …(13) ] to deeply equal []\n at /workspace/krona-staff/tests/e2e/40-compose-pilot.e2e.ts:34:87\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:1628:35\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:26\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:3319:20\n at new Promise (<anonymous>)\n at runWithCancel (file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:3314:10)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:3299:20\n at new Promise (<anonymous>)\n at runWithTimeout (file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:3257:10)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:3876:64"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["deploy/pilot/compose.yaml"],
|
||
"fullName": "deploy/pilot/compose.yaml [PILOT-2] ни один сервис не запускается с NODE_ENV=development",
|
||
"status": "failed",
|
||
"title": "[PILOT-2] ни один сервис не запускается с NODE_ENV=development",
|
||
"duration": 1.0336859999999888,
|
||
"failureMessages": [
|
||
"AssertionError: expected [ 'app' ] to deeply equal []\n at /workspace/krona-staff/tests/e2e/40-compose-pilot.e2e.ts:41:23\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:1628:35\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:2783:26\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:3319:20\n at new Promise (<anonymous>)\n at runWithCancel (file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:3314:10)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:3299:20\n at new Promise (<anonymous>)\n at runWithTimeout (file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:3257:10)\n at file:///workspace/krona-staff/node_modules/vitest/dist/chunks/run.C5UmxDPh.js:3876:64"
|
||
],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
},
|
||
{
|
||
"ancestorTitles": ["deploy/pilot/compose.yaml"],
|
||
"fullName": "deploy/pilot/compose.yaml [PILOT-3] у сервиса app нет учётных данных мигратора",
|
||
"status": "passed",
|
||
"title": "[PILOT-3] у сервиса app нет учётных данных мигратора",
|
||
"duration": 0.5442440000000062,
|
||
"failureMessages": [],
|
||
"meta": {},
|
||
"tags": [],
|
||
"benchmarks": []
|
||
}
|
||
],
|
||
"startTime": 1790408019346,
|
||
"endTime": 1790408019353.5442,
|
||
"status": "failed",
|
||
"message": "",
|
||
"name": "/workspace/krona-staff/tests/e2e/40-compose-pilot.e2e.ts"
|
||
}
|
||
]
|
||
}
|