Goal: Operations API Tests (TypeScript)
Provenance. The original project goal, superseded by the canonical design set. Kept for historical context.
Build a TypeScript-based API test suite that exercises the operations
component’s HTTP API. The suite first re-implements the tests currently written
in Bruno (in the api-test repository), then extends coverage to operations
features the Bruno collection does not yet exercise. The suite is co-located
inside the operations repository as a self-contained Node/TypeScript
subproject.
Repositories
Section titled “Repositories”| Repository | Role | Planned Changes |
|---|---|---|
operations | Test suite home, deploy target, and fixes | New co-located TypeScript API-test subproject; possible Kotlin fixes for API bugs the tests reveal. |
documentation | Project artifacts | This goal plus downstream planning/design docs. |
api-test | Reference only (no changes) | Source of the existing Bruno tests being re-implemented; not modified by this project. |
Success Criteria
Section titled “Success Criteria”- A self-contained TypeScript API-test subproject exists in
operations, with its own package manifest, test runner, and a documented run command. - The suite reproduces the assertions of the active operations Bruno tests (item, kanban, order domains, plus operations-configuration and partition-check probes) against a locally deployed operations instance.
- Request shaping matches the existing contract: bearer auth from a single API
key, tenant-id header, and bitemporal
effectiveasof/recordedasofquery params where applicable. - Base URL / port is configurable (the local NodePort is assigned dynamically — not hardcoded).
- The suite runs green against a local
make localInstalldeployment, and the run is wired into CI or a documented make target. - New tests extend coverage beyond the Bruno baseline for at least the agreed set of previously uncovered operations features (scope defined in planning).
Context
Section titled “Context”The existing operations API tests live in the api-test repo as a Bruno
collection: 356 .bru files (~208 with real assertions; 141 tagged disabled),
organized by domain. Coverage concentrates in item, kanban, and order
(~191 request references), with smaller operations-configuration and
partition-check health suites. The collection encodes cross-cutting concerns a
new suite must replicate: bearer auth from arda_api_key, X-Request-ID /
X-Author / X-Tenant-Id headers, bitemporal query params, tag-based selection,
1Password secret injection per partition, and dynamic local-cluster port
discovery. The operations API is exposed per-module under
/{version}/{module}/{resource} (for example /v1/item/item/...) with
per-module OpenAPI at /v1/<module>/docs/openApi.json — the authoritative schema
source. operations is a pure Kotlin/Gradle repo today with no Node tooling, so
the TypeScript subproject introduces (and must self-contain) its own toolchain.
In Scope
Section titled “In Scope”- A co-located TypeScript API-test subproject in
operations. - Re-implementation of the active operations Bruno tests (item, kanban, order, operations-configuration, partition-check/operations).
- Request / auth / bitemporal helpers equivalent to the Bruno
collection.brubehavior. - Configurable base URL and dynamic NodePort discovery for local runs.
- Extension tests for agreed uncovered operations features.
- A documented run command and CI / make wiring.
Out of Scope
Section titled “Out of Scope”- The
accounts,business-affiliate,qr-lookup, andpdf-rendersuites in the Bruno collection (different components). - Deleting or migrating the existing Bruno collection in
api-test(this project does not modifyapi-test). - Changes to the operations API contract beyond bug fixes surfaced by the tests.
Constraints
Section titled “Constraints”- The TypeScript subproject is self-contained within
operationsand must not disturb the Gradle / Kotlin build or its CI. operationsuses the direct-editCHANGELOG.mdmodel — every PR needs an[Unreleased]entry (validate withmake clqLint).- Do not hardcode the local NodePort (dynamically assigned); parameterize the base URL.
- Local auth uses the sandbox API key injected by the local deploy
(
sandbox0-test-key); the suite key must match the deployed value. - US English / en-US locale for all content and identifiers.
Copyright: (c) Arda Systems 2025-2026, All rights reserved
Copyright: © Arda Systems 2025-2026, All rights reserved