Shared contract suites for adapter packages. Use this package to prove your
broker, result backend, workflow store, and lock store semantics match Stem's
runtime expectations.
dart pub add --dev stem_adapter_tests
import 'package:stem_adapter_tests/stem_adapter_tests.dart' ;
void main () {
runBrokerContractTests (
adapterName: 'my-adapter' ,
factory : BrokerContractFactory (create: createBroker),
);
runResultBackendContractTests (
adapterName: 'my-adapter' ,
factory : ResultBackendContractFactory (create: createBackend),
);
runQueueEventsContractTests (
adapterName: 'my-adapter' ,
factory : QueueEventsContractFactory (create: createBroker),
);
final workflowFactory = WorkflowStoreContractFactory (
create: createWorkflowStore,
);
runWorkflowStoreContractTests (
adapterName: 'my-adapter' ,
factory : workflowFactory,
);
runWorkflowScriptFacadeTests (
adapterName: 'my-adapter' ,
factory : workflowFactory,
);
}
Capability flags let adapters opt out of specific behavior checks while keeping
all other contract assertions active.
BrokerContractCapabilities
Flag
Default
Affects
Behavior when enabled
verifyPriorityOrdering
true
Broker priority test group
Verifies higher-priority messages are delivered first.
verifyBroadcastFanout
false
Broadcast fan-out test group
Verifies broadcast delivery reaches all subscribers and replay semantics remain correct.
ResultBackendContractCapabilities
Flag
Default
Affects
Behavior when enabled
verifyTaskStatusExpiry
true
Task status expiry tests
Verifies status TTL expiration behavior.
verifyGroupExpiry
true
Group expiry tests
Verifies group TTL expiration and post-expiry behavior.
verifyChordClaiming
true
Chord claiming tests
Verifies single-claimant callback dispatch semantics.
verifyWorkerHeartbeats
true
Heartbeat CRUD tests
Verifies heartbeat set/get/list/update behavior.
verifyHeartbeatExpiry
true
Heartbeat expiry tests
Verifies heartbeat TTL expiration behavior independently from heartbeat CRUD checks.
QueueEventsContractCapabilities
Flag
Default
Affects
Behavior when enabled
verifyFanout
true
Multi-listener fan-out tests
Verifies custom queue events reach all active listeners on the same queue scope.
WorkflowStoreContractCapabilities
Flag
Default
Affects
Behavior when enabled
verifyVersionedCheckpoints
true
Checkpoint versioning tests
Verifies versioned checkpoint persistence and retrieval.
verifyRunLeases
true
Run lease tests
Verifies claim/renew/release lease semantics.
verifyWatcherRegistry
true
Watcher tests
Verifies watcher registration, listing, and resolution behavior.
verifyRunsWaitingOn
true
Waiting-topic lookup tests
Verifies lookups for runs waiting on external topics.
verifyFilteredRunListing
true
Filtered run listing tests
Verifies filtered listing and pagination semantics.
LockStoreContractCapabilities
Flag
Default
Affects
Behavior when enabled
verifyOwnerLookup
true
ownerOf tests
Verifies lock owner lookup behavior.
verifyRenewSemantics
true
Renew and expiry tests
Verifies renewal/TTL semantics for active locks.
RevokeStoreContractCapabilities
Flag
Default
Affects
Behavior when enabled
verifyPruneExpired
true
Revoke expiry pruning tests
Verifies pruneExpired removes only expired revocations in the target namespace.
Each flagged test uses explicit skip values (instead of implicit omission) so
it is always clear which capability disabled a test and why.
runResultBackendContractTests (
adapterName: 'full-adapter' ,
factory : ResultBackendContractFactory (create: createBackend),
settings: const ResultBackendContractSettings (
capabilities: ResultBackendContractCapabilities (),
),
);
Adapter without broadcast fan-out
runBrokerContractTests (
adapterName: 'queue-only-adapter' ,
factory : BrokerContractFactory (create: createBroker),
settings: const BrokerContractSettings (
capabilities: BrokerContractCapabilities (
verifyBroadcastFanout: false ,
),
),
);
Adapter with heartbeat CRUD but no heartbeat expiry
runResultBackendContractTests (
adapterName: 'no-heartbeat-expiry-adapter' ,
factory : ResultBackendContractFactory (create: createBackend),
settings: const ResultBackendContractSettings (
capabilities: ResultBackendContractCapabilities (
verifyWorkerHeartbeats: true ,
verifyHeartbeatExpiry: false ,
),
),
);
Adapter without queue-event fan-out
runQueueEventsContractTests (
adapterName: 'single-listener-adapter' ,
factory : QueueEventsContractFactory (create: createBroker),
settings: const QueueEventsContractSettings (
capabilities: QueueEventsContractCapabilities (
verifyFanout: false ,
),
),
);
Workflow Clock Requirement
Workflow store factories receive a shared FakeWorkflowClock. Inject that same
clock into your runtime/store under test so workflow facade and store assertions
observe the same deterministic timeline.
This package tracks the same release cadence as stem.