Teagle test coverage matrix — reference explorer → helex-tx
Status of every test file of the reference terminology-explorer backend (98 files, 556 @Test
methods) against the migration (plan PHASE 3, P3.6). Dispositions:
- ported — scenario ported (
modules/teagle/backend/src/test, 22 classes / 191 methods, all green). A port covers the surviving semantics; scenarios tied to dropped infrastructure (fhirest plumbing, NPM packages, shared caches) are folded out and noted. - flint — pure operation semantics; ported into the Flint (
modules/tx-fhir) test suite on the in-memory store (see the Flint section at the bottom). - tx-ecosystem — behavior certified by the HL7 tx-ecosystem conformance suite that gates Flint (general mode 1194/1194); no in-repo port needed.
- n/a — infrastructure that is not part of the Teagle architecture (fhirest conformance bootstrap, NPM/IG package registry, shared HTTP caches, background enrichment) or made moot by it (remote body materialization replaced by delegation-to-owner); justification per row.
util
| Explorer test (methods) | Disposition | Notes |
|---|---|---|
| GlobMatcherTest (16) | ported | → util/GlobMatcherTest |
| EcosystemPatternMatchingTest (28) | ported | → util/GlobMatcherTest (pattern detection) + util/AuthoritativePatternTest (parser + matcher) |
| AuthoritativeUrlAndQueryParseTest (11) | ported | → util/AuthoritativePatternTest (query split, version pin, type-collection endpoint) |
| FhirResourceIdParserTest (10) | ported (partial) | Teagle’s minimal FhirResourceIdParser covered through RoutingCatalogTest.VersionSuffixedIds + MultiSourceExpandInstanceRoutingTest; the reference’s exotic id forms are out of scope |
| FhirVersionsTest (4) | n/a (deferred) | semver-wildcard version matching (1.x.x) — Teagle’s catalog resolves exact versions; revisit only if an ecosystem config needs wildcard ` |
| AdministrativeGenderRepro_Test (5) | flint | → engine/DisplayLanguagePrecedenceTest (display precedence repro) |
| SystemRequestContextTest (4) | n/a | fhirest request-context plumbing |
ecosystem
| Explorer test (methods) | Disposition | Notes |
|---|---|---|
| EcosystemConfigTest (23) | ported (partial) | → ecosystem/EcosystemConfigTest; Teagle adds server type (http/editable/local); npm/cache fields not modeled |
| EnvInterpolatorTest (7) | ported | → ecosystem/EnvInterpolatorTest |
| EcosystemControllerAuthoritativeTest (2) | ported | semantics → registry/ServerRegistryRoutingTest; the REST view is /api/servers |
| EcosystemExclusionsIntegrationTest (16) | ported (partial) | exclusion-before-authoritative → ServerRegistryRoutingTest |
| EcosystemConfigFactoryAutoDeriveTest (4) | n/a (architecture) | strategy auto-derivation (INLINE/CACHED/LOCAL) — Teagle implements INLINE delegation only; CACHED (local expansion of remotely-fetched full CodeSystems) is a possible optimization slice |
| EcosystemConfigFactoryAuthValidationTest (9) | ported | → ecosystem/EcosystemServerAuthTest (missing-field/unsupported-method failures at load time) |
| EcosystemServerAuthDeserializationTest (4) | ported | → ecosystem/EcosystemServerAuthTest (password/oauth credential forms, markdown access_info) |
| UpstreamAuthServiceTest (6, in upstream/) | ported | → upstream/UpstreamAuthServiceTest (Basic, oauth fetch+cache, scope form, invalidate/clearAll, TokenFetchException) |
| EcosystemReloadControllerTest (10) / EcosystemReloadServiceTest (9) | ported (core) | → ecosystem/EcosystemReloadTest (+ POST /api/ecosystem/reload): swap, removed-server catalog cleanup, malformed-config keeps previous registry |
| EcosystemSelfHealServiceTest (5) / EcosystemSelfHealRecoveryTest (1) | ported | → registry/ServerHealthTest (consecutive-failure threshold, immediate recovery) + POST /api/servers/health-check |
| RemoteEcosystemLoaderAuthStrippingTest (2) | ported | → ecosystem/RemoteEcosystemLoaderTest (federation merge, remote auth material stripped, fetch failure drops only the placeholder) |
routing / catalog
| Explorer test (methods) | Disposition | Notes |
|---|---|---|
| ResourceRoutingCatalogTest (25) | ported (partial) | → routing/RoutingCatalogTest: explicit/wildcard precedence, duplicates, removal; count/enrichment fields not modeled |
| ResourceRoutingCatalogFindByCanonicalUrlTest (3) | ported | → RoutingCatalogTest.FindByCanonicalUrl |
| ResourceRoutingCatalogActiveVersionSelectionTest (4) | ported | publication precedence (active > retired, then highest version) |
| ResourceRoutingCatalogReverseVersionStripTest (5) | ported | id--version / `id |
| ResourceRoutingCatalogPopulatorTest (37) | ported (core) | → routing/HttpCatalogScanTest: page-walk + register, explicit-vs-wildcard by authoritative pattern, rescan replaces, failed rescan keeps old entries |
| CanonicalResourceCatalogServiceBackoffTest (7) | ported | → HttpCatalogScanTest.retriesWithExponentialBackoffBeforeGivingUp |
| CanonicalResourceCatalogServiceUrlBuildTest (6) | ported (core) | → HttpCatalogScanTest (_count paging url, next-link following incl. foreign-host guard) |
| CanonicalResourceCatalogServiceLenientParseTest (2) | ported | → HttpCatalogScanTest.nonFhirBodyIsSkippedLeniently |
| AuthoritativeCatalogFiltersTest (4) | ported | → HttpCatalogScanTest.statusFilterInThePatternGatesExplicitRegistration |
| RouterRoutingServiceTest (9) | ported (partial) | id-level routing → MultiSourceExpandInstanceRoutingTest + catalog-routed remote reads (TeagleResourceController.remoteRead, verified live against the reference server) |
| CanonicalResolveControllerTest (10) | ported (core) | → api/CatalogControllerTest (/api/resolve: catalog row first, authoritative-pattern fallback, 404) |
| CatalogSnapshotStoreTest (4) | n/a (architecture) | catalog persistence — Teagle’s catalog rebuilds from the HTTP scan at boot; snapshotting is an optimization for very large registries, not scheduled |
operation — multi-source $expand
| Explorer test (methods) | Disposition | Notes |
|---|---|---|
| ValueSetMultiSourceExpandFilterTest (19) | ported (core) | → MultiSourceExpandFilterPagingTest |
| ValueSetMultiSourceExpandImplicitVsTest (8) | ported | → MultiSourceExpandImplicitVsTest |
| ValueSetMultiSourceExpandImportIncludeTest (1) | ported | → MultiSourceExpandImportIncludeTest (+ intersection semantics) |
| (merge core, no direct counterpart) | ported | → MultiSourceExpandMergeTest |
| ValueSetMultiSourceExpandUnresolvedUrlTest (4) | ported | → MultiSourceExpandDelegationGuardTest.UnresolvedUrl (tx-ecosystem 4xx/not-found shape; resolved-but-empty stays 200/0) |
| ValueSetMultiSourceExpandEmptyComposeDelegationTest (1) | ported | → MultiSourceExpandDelegationGuardTest.EmptyComposeDelegation |
| ValueSetMultiSourceExpandExternalImplicitDelegationTest (3) | ported | → MultiSourceExpandDelegationGuardTest.ImplicitFhirVs |
| ValueSetMultiSourceExpandImplicitImportDelegationTest (2) | ported | implicit VS as import reference → MultiSourceExpandImportIncludeTest.remoteOwnedCanonicalDelegatesWholeExpandToOwner (the import path re-enters expand, which owns the delegation) |
| ValueSetMultiSourceExpandSearchMissDelegationTest (1) / ValueSetExpandExactRouteMissFallsBackToDiscoveryTest (1) | ported | canonical-delegation on local miss → MultiSourceExpandImportIncludeTest.remoteOwnedCanonicalDelegatesWholeExpandToOwner |
| ValueSetMultiSourceExpandParseGuardTest (3) | ported (adapted) | request-side: unparseable body → 400 invalid (TeagleOperationController.dispatch, exercised via EditableServerCrudTest.unparseableBodyIsRejected + batch reject); upstream-side non-FHIR guard lives in Flint’s delegate (502) |
| ValueSetMultiSourceExpandBaseUrlGuardTest (3) | ported (adapted) | an http server with a blank target is dropped at load (EcosystemConfigTest.dropsHttpServerWhoseTargetInterpolatesToBlank) — the misconfiguration cannot reach request time |
| ValueSetMultiSourceExpandCatalogIdRoutingTest (2) | ported | → MultiSourceExpandInstanceRoutingTest (/ValueSet/{id}/$expand) |
| ValueSetMultiSourceExpandEditionPinTest (2) | ported | → MultiSourceExpandVersionPinTest (catalog pin, authored wins) |
| ValueSetMultiSourceExpandStaleVersionPinRetryTest (1) | ported | → MultiSourceExpandVersionPinTest (self-heal retry, only-our-pin stripped, non-version errors not retried) |
| ValueSetMultiSourceExpandActiveVersionSearchTest (5) | ported (adapted) | the local half → ActiveVersionSelectionTest (active-over-retired, archived resolves, explicit version honored). The remote half is moot: Teagle delegates by canonical url and the owner resolves its own active version |
| ValueSetMultiSourceExpandSummaryReadTest (2) / SummaryFalseTest (1) | n/a (architecture) | summary-body re-reads existed because the explorer materialized remote VS bodies; Teagle delegates the whole $expand to the owner (EmptyComposeDelegation covers the stub-body edge) |
| ValueSetMultiSourceExpandInlineDisplayFloorTest (3) | ported | → operation/InlineDisplayFloorTest — an aggregator-layer rule: the kernel’s language semantics are conformance-exact (an untranslated display legitimately drops), so Teagle backfills authored compose displays on both the fast path and the fan-out merge, never overwriting a resolved display |
| ValueSetMultiSourceExpandPropertyDecorationTest (4) / FallbackPropertyTest (2) / PropertyUriSanitizerTest (7) | flint | → engine/ExpansionPropertyTest (property decoration + declared-uri hygiene); overlaps the tx-ecosystem parameters suite |
| ValueSetMultiSourceExpandSupplementDesignationTest (5) / UpstreamSupplementDesignationTest (8) / SupplementDesignationPackageExpandValidationTest (2) | flint | → engine/SupplementDesignationTest (useSupplement designations on expand + validate); the upstream-supplement merge variant becomes relevant when supplements meet remote sources — noted as a Teagle follow-up |
| ValueSetMultiSourceExpandUpstreamErrorLogLevelTest (2) | n/a | log-level assertion of explorer plumbing |
| ValueSetMultiSourceExpandCompositeSnomedReproIT (1) / ValueSetActiveVersionSelectionLiveIT (4) | n/a (live IT) | live integration repros against specific upstreams; the behavior they pin is covered by the unit ports + the live 2-source verification against the reference server |
operation — router lookup/validate
| Explorer test (methods) | Disposition | Notes |
|---|---|---|
| RouterOperationServiceCatalogRoutingTest (1) | ported | → operation/CatalogFirstLookupRoutingTest (patterns first, catalog second, local store outranks, fail-closed) |
| RouterOperationServiceValidateCodeRoutingTest (6) | ported (core) | dispatch shared with lookup (TeagleOperationService.validateCode); VS-url / ?fhir_vs / coding-system routing branches; exercised via TeagleBatchControllerTest + ServerRegistryRoutingTest |
| RouterOperationServiceValidateCodeParameterTest (4) | tx-ecosystem | GET parameter typing + validate-code parameter semantics — conformance parameters/validation suites |
| RouterOperationServiceLookupParameterTypeTest (3) | tx-ecosystem | as above |
| RouterOperationServiceUnresolvedCanonicalTest (6) | tx-ecosystem | fail-closed unknown-system outcomes — kernel behavior under conformance (+ CatalogFirstLookupRoutingTest.unknownSystemStaysLocalAndFailsClosed) |
| RouterOperationServiceStrippedCodeSystemLookupTest (5) / HttpLookupEnrichmentTest (2) | n/a (architecture) | summary-stub re-fetch existed because the explorer materialized remote bodies; Teagle forwards the operation to the owner |
| RouterOperationServiceSupplementLookupTest (4) / UpstreamSupplementLookupTest (4) | flint | → engine/SupplementDesignationTest (supplement-aware $lookup) |
| RouterOperationServiceStaleVersionPinRetryTest (1) | ported | → MultiSourceExpandVersionPinTest.lookupPinsTheCatalogEditionAndSelfHealsAStalePin |
| BatchBundleOperationRoutingTest (5, in bundle/) | ported | → fhir/TeagleBatchControllerTest (POST /fhir batch → batch-response, per-entry status, one failure never fails the batch) |
search / info
| Explorer test (methods) | Disposition | Notes |
|---|---|---|
| CatalogSearchControllerTest (3), RoutedCanonicalSearchHandler{CombinedSearch(7),MultiVersion(4),ServerFilter(6)}, ResourceListContractTest (10), SearchTotalCountIndependentTest (0) | ported (core) | → api/CatalogControllerTest (/api/catalog): list-row contract (url + versions[] + status + target), text/type/server filters, multi-version grouping, page-cap with independent total |
| LoadStatisticsServiceTest (6), RouterLoadInfoControllerTest (1) | ported (core) | → api/CatalogControllerTest.statsCountPerServerAndSurfaceDuplicates (/api/catalog/stats: per-server/type counts + rejected duplicates) |
infrastructure not migrated
| Explorer test (methods) | Disposition | Notes |
|---|---|---|
| cache/* — FhirEtagFilterTest (22), TerminologyGenerationRegistryTest (11), TerminologyCacheInvalidatorTest (4), CacheInvalidationEventListenerTest (4), CacheManagementInvalidateEndpointTest (3), InMemorySharedCache (0) | n/a | shared HTTP cache/ETag layer (Caffeine/Redis) — not part of Teagle v1; the catalog version() counter is the revalidation hook if a cache layer is added |
| fhirpackage/* — PackageResourceReadInterceptorTest (15), PackageLoadReadinessTest (4), FhirPackageLoaderScanAllFilesTest (2) | n/a | NPM/IG package registry — replaced by the editable/local store model |
| admin/PackageReloadControllerTest (8) | n/a | package admin endpoint (/api/ecosystem/reload is the surviving reload surface) |
| alias/AliasPreloadBlocksReadinessTest (3) | n/a | fhirest alias preloading |
| enrichment/ResourceEnrichmentServiceTest (2), ValueSetBackgroundExpanderRequestContextTest (2) | n/a | background enrichment of catalog entries |
| conformance/RouterConformanceLoaderMultiVersionTest (1) | n/a | fhirest conformance bootstrap — Flint serves conformance |
| conformance/TerminologyCapabilitiesProviderTest (8) | ported | → MetadataAggregationTest |
New Teagle capabilities without an explorer counterpart
| Teagle test | Covers |
|---|---|
EditableServerCrudTest (7) | the NEW editable in-memory server: FHIR CRUD into Flint’s MutableResourceStore, catalog sync, authored content immediately expandable, delete fails closed, and conformance resources (putsAndReadsAStructureDefinition) served by the same path as terminology |
HttpCatalogScanTest.scansStructureDefinitionAndStructureMapListings | SD/SM are catalogued like any other canonical, and an authoritative pattern claims an SD (they share authoritative with CodeSystem) |
HttpCatalogScanTest.aServerRejectingStructureDefinitionSearchKeepsScanningTheOtherTypes | the live upstream answers an SD search with a not-supported OperationOutcome — one unsupported type must not cost the server’s other types |
HttpCatalogScanTest.theScannedTypeListIsConfigurable | teagle.catalog-scan.types trims the scan so unsupported types cost no retry budget |
MultiSourceExpandMergeTest.fullyLocalComposeStaysOnTheKernelFastPath | conformance-preserving local fast path |
| merge dedup nested-duplicate pruning | MultiSourceExpandMergeTest.duplicateSystemCodePairsAreMergedOnce — fixes a flaw the reference merge had (top-level-only dedup keys) |
Flint op-semantics ports (P3.6b, modules/tx-fhir/src/test — 58 methods green)
| Explorer test (methods) | Flint test | Covers |
|---|---|---|
| SupplementDesignation cluster (5+8+2) + SupplementLookup (4+4) | engine/SupplementDesignationTest | useSupplement designations on $expand / $lookup over the in-memory store (base designations always survive; a supplement of a different base never leaks) |
| PropertyDecoration (4) + FallbackProperty (2) + PropertyUriSanitizer (7) | engine/ExpansionPropertyTest | requested-property projection, declared CodeSystem property uris, missing values never evict members |
| AdministrativeGenderRepro (5) | engine/DisplayLanguagePrecedenceTest | display precedence across displayLanguage / Accept-Language, untranslated fallback |
After the port the full tx-ecosystem general-mode suite was re-run: 1194/1194 — the ported tests document kernel behavior, they do not change it.
Related: Ucumber (tx-ucum)
The reference server’s separate ucum module (14 methods, outside the explorer’s 556) is
migrated as modules/ucumber/backend — UcumApiTest (13 methods green) covers
validate/analyse/convert/canonicalise/commensurability/model listings over Flint’s UcumService;
the essence-import/export administration (DB-backed) is not carried.
Tally
- Explorer total: 98 files / 556 methods.
- ported: 61 files (fully, core, or adapted) → 22 Teagle test classes / 191 methods green
- 3 Flint engine test classes / 58 methods green (P3.6b).
- tx-ecosystem: 5 files subsumed by the conformance gate (1194/1194 general, re-verified after every Flint change).
- n/a: 25 files — 17 dropped infrastructure (caches, packages, aliases, enrichment, fhirest plumbing), 8 made moot by the delegation architecture or explicitly deferred (semver-wildcard routing, catalog snapshots, CACHED strategy, live-IT repros) — each with its justification above.
- Every one of the 98 explorer files is accounted for in the tables above.