4c1e417e27
Original task: add unit tests for the new `formatAuditSummary` formatter
and an API-level test asserting the enriched group sub-resource audit
metadata, and wire both into the existing `test` workflow.
What changed:
- Extracted `formatAuditSummary` and its helpers (`asRecord`, `asString`,
`asNumber`, `unitLabel`, `appName`, `linkedAppName`, `plainName`,
`changeCount`) out of `artifacts/tx-os/src/pages/admin.tsx` into a new
`artifacts/tx-os/src/lib/audit-summary.ts` module so the pure formatter
can be unit-tested without the React tree. `admin.tsx` now imports the
helpers from that module.
- Added `artifacts/tx-os/src/__tests__/audit-summary.test.mjs` with 22
Node test-runner cases covering app rename (EN + AR), app-update
fallback, group rename, group multi-field update, registration toggle
(open / close / with-other-changes), and every group.user/app/role
add/remove name vs id-only branch, plus the unknown-action default.
- Added `pnpm --filter @workspace/tx-os test` (Node 24's native
TypeScript loader runs the .mjs tests against the .ts module directly).
- Added `artifacts/api-server/tests/group-audit-metadata.test.mjs` using
the same harness as `groups-crud.test.mjs`. It hits POST/DELETE
`/api/groups/:id/{users,apps,roles}/:targetId` and reads the resulting
`audit_logs.metadata`, asserting `username`, `appSlug` /`appNameEn` /
`appNameAr`, and `roleName` are persisted alongside the raw IDs.
- Updated the `test` workflow to run the tx-os unit tests before the
api-server tests, then the tx-os e2e tests.
Verification: all 22 tx-os unit tests pass via the new pnpm script, and
all 6 new api-server audit-metadata tests pass against a live server.
The overall api-server suite still has pre-existing flakes
(executive-meetings notifications/status transitions, and the
count-based group invariant in groups-crud.test.mjs) that are unrelated
to this change; both flake clusters are filed as follow-up tasks.
Replit-Task-Id: 182cd4ed-c55c-43e3-b10b-8147a9611fd4
72 lines
1.2 KiB
Plaintext
72 lines
1.2 KiB
Plaintext
modules = ["nodejs-24", "python-3.11", "postgresql-16"]
|
|
|
|
[deployment]
|
|
router = "application"
|
|
deploymentTarget = "autoscale"
|
|
|
|
[deployment.postBuild]
|
|
args = ["pnpm", "store", "prune"]
|
|
env = { "CI" = "true" }
|
|
|
|
[workflows]
|
|
runButton = "Project"
|
|
|
|
[[workflows.workflow]]
|
|
name = "Project"
|
|
mode = "parallel"
|
|
author = "agent"
|
|
|
|
[[workflows.workflow.tasks]]
|
|
task = "workflow.run"
|
|
args = "test"
|
|
|
|
[[workflows.workflow]]
|
|
name = "test"
|
|
author = "agent"
|
|
|
|
[workflows.workflow.metadata]
|
|
outputType = "console"
|
|
|
|
[[workflows.workflow.tasks]]
|
|
task = "shell.exec"
|
|
args = "pnpm --filter @workspace/api-server test:wait && pnpm --filter @workspace/tx-os test && pnpm --filter @workspace/api-server test && pnpm --filter @workspace/tx-os test:e2e"
|
|
|
|
[agent]
|
|
stack = "PNPM_WORKSPACE"
|
|
expertMode = true
|
|
|
|
[postMerge]
|
|
path = "scripts/post-merge.sh"
|
|
timeoutMs = 120000
|
|
|
|
[[ports]]
|
|
localPort = 8080
|
|
externalPort = 8080
|
|
|
|
[[ports]]
|
|
localPort = 8081
|
|
externalPort = 80
|
|
|
|
[[ports]]
|
|
localPort = 8082
|
|
externalPort = 3003
|
|
|
|
[[ports]]
|
|
localPort = 8083
|
|
externalPort = 5173
|
|
|
|
[[ports]]
|
|
localPort = 25785
|
|
externalPort = 3000
|
|
|
|
[[ports]]
|
|
localPort = 25786
|
|
externalPort = 3002
|
|
|
|
[[ports]]
|
|
localPort = 25787
|
|
externalPort = 5000
|
|
|
|
[nix]
|
|
channel = "stable-25_05"
|