Skip to content

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.

RepositoryRolePlanned Changes
operationsTest suite home, deploy target, and fixesNew co-located TypeScript API-test subproject; possible Kotlin fixes for API bugs the tests reveal.
documentationProject artifactsThis goal plus downstream planning/design docs.
api-testReference only (no changes)Source of the existing Bruno tests being re-implemented; not modified by this project.
  1. A self-contained TypeScript API-test subproject exists in operations, with its own package manifest, test runner, and a documented run command.
  2. 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.
  3. Request shaping matches the existing contract: bearer auth from a single API key, tenant-id header, and bitemporal effectiveasof / recordedasof query params where applicable.
  4. Base URL / port is configurable (the local NodePort is assigned dynamically — not hardcoded).
  5. The suite runs green against a local make localInstall deployment, and the run is wired into CI or a documented make target.
  6. New tests extend coverage beyond the Bruno baseline for at least the agreed set of previously uncovered operations features (scope defined in planning).

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.

  • 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.bru behavior.
  • 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.
  • The accounts, business-affiliate, qr-lookup, and pdf-render suites in the Bruno collection (different components).
  • Deleting or migrating the existing Bruno collection in api-test (this project does not modify api-test).
  • Changes to the operations API contract beyond bug fixes surfaced by the tests.
  1. The TypeScript subproject is self-contained within operations and must not disturb the Gradle / Kotlin build or its CI.
  2. operations uses the direct-edit CHANGELOG.md model — every PR needs an [Unreleased] entry (validate with make clqLint).
  3. Do not hardcode the local NodePort (dynamically assigned); parameterize the base URL.
  4. Local auth uses the sandbox API key injected by the local deploy (sandbox0-test-key); the suite key must match the deployed value.
  5. US English / en-US locale for all content and identifiers.

Copyright: (c) Arda Systems 2025-2026, All rights reserved