Skip to content
Deze documentatie wordt actief uitgebreid — kom regelmatig terug.

ADR-00023: CTN Test Strategy — layers, ownership, and CI gating

Status flow: Proposed → Accepted → Reviewed → Approved (or Rejected), or Not Required. A superseded ADR keeps its file; only its status changes to Superseded by NNNNN.

Governance bodyStatusLast update
CTN Project TeamProposed2026-07-08
CTN Technical Advisory BoardPending
CTN Steering CommitteePending
BDI Conformance TeamPending
BDI Framework TeamPending

Several decisions already touch testing, and two of them look alike at first glance: ADR-00015 (in-repo Java browser tests) and ADR-000017 (a strategic Playwright + TypeScript automation framework). They both pick Playwright over Cypress and Selenium, which makes them read as duplicates — but they operate at different layers and answer different questions. There was, until now, no single document that says how the whole test estate fits together: what is tested at which layer, which tooling is used where, who owns and contributes each layer, and what runs on every deploy.

This ADR is that overview. It does not re-decide anything the layer-specific ADRs already settled; it places them in one picture and makes the boundaries explicit so the two Playwright ADRs no longer read as overlapping.

The guiding goal (raised by the product owner) is old-fashioned test-driven development: a growing, shared suite where the product owner, testers, and end-users can add test cases; where prototype API test cases are carried forward rather than thrown away; and where the suite runs on every deploy so regressions surface early.

CTN adopts a layered test strategy. Each layer has a defined tool, a run trigger, and an owner. The layers are complementary; nothing below replaces a lower layer.

LayerWhat it provesToolingRunsOwner
UnitLogic of a single class/module in isolationJUnit 5Every build (./mvnw test), every deployDevelopers
IntegrationA module against real infra (DB, Keycloak)Quarkus @QuarkusTest *IT on Failsafe, DevServices Postgres + Keycloak, @Tag("requires-database"), Docker-gatedEvery CI build where Docker is present; SKIPPED (not green) when absentDevelopers
API / contractHTTP endpoints and token flows at the wire levelRestAssured + Keycloak admin client (e.g. EHerkenningStepUpBrokerIT)Every CI build (same gate as integration)Developers; prototype API cases carried forward here
E2E — in-repo (tactical)Real-browser flows of the buildless asr-demo-frontend, bound to the backend buildPlaywright for Java on Maven Failsafe — see ADR-00015Local / on-demand (@Tag("browser-e2e"), excluded from CI)Developers
E2E — portal (strategic)Real-browser flows of the production portal UIPlaywright + TypeScript TAaaS framework (Page Object / Component / Service / Utility layers, SOLID/DRY) — see ADR-000017Its own CI/CD pipeline, once the portal frontend stack is chosenTAaaS + testers + product owner / end-users
Test dataConsistent, compliant fixtures across all layersSee ADR-00020 (tiered: real data for acceptance, synthetic elsewhere)Underpins all layersDevelopers + testers

Why two end-to-end tiers (and why that is not a contradiction)

Section titled “Why two end-to-end tiers (and why that is not a contradiction)”

The two Playwright ADRs deliberately choose different toolchains because they test different surfaces:

  • In-repo Java tier (ADR-00015) keeps a single Maven toolchain inside the backend repo, whose only frontend today is a throwaway static demo with no build step. Binding one real-browser tracer-bullet test to Failsafe — gated exactly like the database integration tests — buys real OIDC/PKCE coverage without dragging a Node build into a backend repo. ADR-00015 explicitly rejects a separate Node/JS framework for this purpose.
  • Strategic TypeScript tier (ADR-000017) is the standalone UI-automation framework for the real portal, owned by the TAaaS team and contributed to by testers and the product owner. It targets the portal’s frontend stack — an open question still — and lives in its own repository and pipeline.

They are sequential and complementary, not competing: the Java tier covers what exists now (the demo and backend contract flows); the TypeScript tier is the durable home for portal UI automation once the frontend stack lands. Whether the two toolchains eventually converge onto one is a future decision, taken when the portal stack is decided; this strategy does not force convergence and does not block it.

  • Developers keep the unit, integration, API, and in-repo e2e layers green as part of normal development; these run on every deploy through CI.
  • The strategic TypeScript suite is the place where the product owner, testers, and end-users add and grow test cases — smoke tests, critical business workflows, and regression scenarios — so the suite expands with the product.
  • Prototype API test cases are migrated into the API/contract layer rather than discarded, preserving accumulated coverage.
  • Positive: one shared picture of the test estate; the 00015 / 000017 overlap is resolved as a deliberate per-layer split; a clear path for non-developers to contribute tests; regressions surface on every deploy.
  • Negative: two Playwright toolchains (Java and TypeScript) must be maintained until (or unless) a convergence decision is taken; ownership spans developers and a separate TAaaS/test function.
  • Neutral: this ADR is an umbrella — changes to any single layer are still made in that layer’s own ADR, and this document is updated to keep the overview current.
  • Security review completed
  • Performance impact assessed
  • Integration impact evaluated
  • Documentation updated
  • Stakeholder approval obtained
DateStatusNotes
2026-07-08ProposedInitial umbrella strategy tying together ADR-00015 (in-repo Java e2e) and ADR-000017 (strategic TypeScript framework), plus ADR-00020 (test data)

In samenwerking met

Connected Trade NetworkConclusionData in LogisticsContargoInland Terminals GroupVan Berkel