@adcp/sdk 6.9.0 → 6.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/adcp.js +285 -5
- package/compliance/cache/3.0.6.previous/domains/brand/index.yaml +163 -0
- package/compliance/cache/3.0.6.previous/domains/creative/index.yaml +412 -0
- package/compliance/cache/3.0.6.previous/domains/governance/index.yaml +683 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/creative-reception.yaml +247 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/index.yaml +769 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/create_media_buy_async.yaml +232 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +414 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/delivery_reporting.yaml +205 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_approved.yaml +211 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_conditions.yaml +196 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_denied.yaml +192 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_denied_recovery.yaml +244 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/invalid_transitions.yaml +284 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/inventory_list_no_match.yaml +143 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/inventory_list_targeting.yaml +271 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/measurement_terms_rejected.yaml +195 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/pending_creatives_to_start.yaml +250 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/proposal_finalize.yaml +243 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/state-machine.yaml +442 -0
- package/compliance/cache/3.0.6.previous/domains/signals/index.yaml +266 -0
- package/compliance/cache/3.0.6.previous/domains/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.0.6.previous/index.json +324 -0
- package/compliance/cache/3.0.6.previous/protocols/brand/index.yaml +163 -0
- package/compliance/cache/3.0.6.previous/protocols/creative/index.yaml +412 -0
- package/compliance/cache/3.0.6.previous/protocols/governance/index.yaml +683 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/creative-reception.yaml +247 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/index.yaml +769 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/create_media_buy_async.yaml +232 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +414 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/delivery_reporting.yaml +205 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_approved.yaml +211 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_conditions.yaml +196 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_denied.yaml +192 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_denied_recovery.yaml +244 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/invalid_transitions.yaml +284 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/inventory_list_no_match.yaml +143 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/inventory_list_targeting.yaml +271 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +195 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +250 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/proposal_finalize.yaml +243 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/state-machine.yaml +442 -0
- package/compliance/cache/3.0.6.previous/protocols/signals/index.yaml +266 -0
- package/compliance/cache/3.0.6.previous/protocols/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.0.6.previous/specialisms/audience-sync/index.yaml +280 -0
- package/compliance/cache/3.0.6.previous/specialisms/brand-rights/index.yaml +350 -0
- package/compliance/cache/3.0.6.previous/specialisms/brand-rights/scenarios/governance_denied.yaml +204 -0
- package/compliance/cache/3.0.6.previous/specialisms/collection-lists/index.yaml +359 -0
- package/compliance/cache/3.0.6.previous/specialisms/content-standards/index.yaml +572 -0
- package/compliance/cache/3.0.6.previous/specialisms/creative-ad-server/index.yaml +383 -0
- package/compliance/cache/3.0.6.previous/specialisms/creative-generative/generative-seller.yaml +758 -0
- package/compliance/cache/3.0.6.previous/specialisms/creative-generative/index.yaml +746 -0
- package/compliance/cache/3.0.6.previous/specialisms/creative-template/index.yaml +413 -0
- package/compliance/cache/3.0.6.previous/specialisms/governance-aware-seller/index.yaml +136 -0
- package/compliance/cache/3.0.6.previous/specialisms/governance-delivery-monitor/index.yaml +441 -0
- package/compliance/cache/3.0.6.previous/specialisms/governance-spend-authority/denied.yaml +221 -0
- package/compliance/cache/3.0.6.previous/specialisms/governance-spend-authority/index.yaml +330 -0
- package/compliance/cache/3.0.6.previous/specialisms/property-lists/index.yaml +482 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-broadcast-tv/index.yaml +689 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-catalog-driven/index.yaml +779 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-guaranteed/index.yaml +504 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-non-guaranteed/index.yaml +428 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-proposal-mode/index.yaml +520 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-social/index.yaml +584 -0
- package/compliance/cache/3.0.6.previous/specialisms/signal-marketplace/index.yaml +415 -0
- package/compliance/cache/3.0.6.previous/specialisms/signal-marketplace/scenarios/governance_denied.yaml +207 -0
- package/compliance/cache/3.0.6.previous/specialisms/signal-owned/index.yaml +316 -0
- package/compliance/cache/3.0.6.previous/test-kits/acme-outdoor.yaml +210 -0
- package/compliance/cache/3.0.6.previous/test-kits/bistro-oranje.yaml +126 -0
- package/compliance/cache/3.0.6.previous/test-kits/nova-motors.yaml +262 -0
- package/compliance/cache/3.0.6.previous/test-kits/osei-natural.yaml +126 -0
- package/compliance/cache/3.0.6.previous/test-kits/signed-requests-runner.yaml +155 -0
- package/compliance/cache/3.0.6.previous/test-kits/substitution-observer-runner.yaml +690 -0
- package/compliance/cache/3.0.6.previous/test-kits/summit-foods.yaml +125 -0
- package/compliance/cache/3.0.6.previous/test-kits/webhook-receiver-runner.yaml +265 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/001-minimal-plan.json +43 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/002-full-plan.json +217 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/003-bookkeeping-stripped.json +60 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/004a-human-review-omitted.json +43 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/004b-human-review-explicit-null.json +49 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/005a-policy-categories-order-1.json +53 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/005b-policy-categories-order-2.json +57 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/006a-ext-trace-v1.json +49 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/006b-ext-trace-v2.json +53 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/007-unicode-objectives.json +43 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/008-numeric-canonicalization.json +65 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/README.md +219 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/canonicalization.json +241 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/keys.json +60 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/001-no-signature-header.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/002-wrong-tag.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/003-expired-signature.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/004-window-too-long.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/005-alg-not-allowed.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/006-missing-covered-component.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/007-missing-content-digest.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/008-unknown-keyid.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +27 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/010-content-digest-mismatch.json +33 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/011-malformed-header.json +27 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/013-expires-le-created.json +27 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/014-missing-nonce-param.json +27 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/015-signature-invalid.json +28 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/016-replayed-nonce.json +35 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/017-key-revoked.json +38 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +28 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/019-signature-without-signature-input.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/020-rate-abuse.json +34 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/022-multi-valued-content-type.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +32 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/024-unquoted-string-param.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +43 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/026-non-ascii-host.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +25 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/001-basic-post.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/002-post-with-content-digest.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/003-es256-post.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/004-multiple-signature-labels.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/005-default-port-stripped.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/006-dot-segment-path.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/007-query-byte-preserved.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/008-percent-encoded-path.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/011-ipv6-authority.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/README.md +211 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/keys.json +61 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/001-wrong-tag.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/002-expired-signature.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/003-window-too-long.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/005-missing-authority-component.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/006-missing-content-digest.json +25 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/007-unknown-keyid.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/011-signature-without-input.json +25 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/013-expires-le-created.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/015-signature-invalid.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/016-replayed-nonce.json +37 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/017-key-revoked.json +32 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/018-rate-abuse.json +33 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/019-revocation-stale.json +32 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +41 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/001-basic-post.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/002-es256-post.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/004-default-port-stripped.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +25 -0
- package/compliance/cache/3.0.6.previous/universal/capability-discovery.yaml +125 -0
- package/compliance/cache/3.0.6.previous/universal/collection-lists-pagination-integrity.yaml +306 -0
- package/compliance/cache/3.0.6.previous/universal/content-standards-pagination-integrity.yaml +326 -0
- package/compliance/cache/3.0.6.previous/universal/deterministic-testing.yaml +1343 -0
- package/compliance/cache/3.0.6.previous/universal/error-compliance.yaml +474 -0
- package/compliance/cache/3.0.6.previous/universal/fictional-entities.yaml +307 -0
- package/compliance/cache/3.0.6.previous/universal/get-media-buys-pagination-integrity.yaml +160 -0
- package/compliance/cache/3.0.6.previous/universal/get-signals-pagination-integrity.yaml +211 -0
- package/compliance/cache/3.0.6.previous/universal/idempotency.yaml +593 -0
- package/compliance/cache/3.0.6.previous/universal/pagination-integrity-creative-formats.yaml +258 -0
- package/compliance/cache/3.0.6.previous/universal/pagination-integrity-list-accounts.yaml +262 -0
- package/compliance/cache/3.0.6.previous/universal/pagination-integrity.yaml +263 -0
- package/compliance/cache/3.0.6.previous/universal/property-lists-pagination-integrity.yaml +307 -0
- package/compliance/cache/3.0.6.previous/universal/runner-output-contract.yaml +358 -0
- package/compliance/cache/3.0.6.previous/universal/schema-validation.yaml +526 -0
- package/compliance/cache/3.0.6.previous/universal/security.yaml +431 -0
- package/compliance/cache/3.0.6.previous/universal/signed-requests.yaml +205 -0
- package/compliance/cache/3.0.6.previous/universal/storyboard-schema.yaml +1176 -0
- package/compliance/cache/3.0.6.previous/universal/v3-envelope-integrity.yaml +106 -0
- package/compliance/cache/3.0.6.previous/universal/webhook-emission.yaml +337 -0
- package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
- package/dist/lib/server/create-adcp-server.d.ts +33 -0
- package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
- package/dist/lib/server/create-adcp-server.js +127 -1
- package/dist/lib/server/create-adcp-server.js.map +1 -1
- package/dist/lib/server/credential-policy.d.ts +221 -0
- package/dist/lib/server/credential-policy.d.ts.map +1 -0
- package/dist/lib/server/credential-policy.js +260 -0
- package/dist/lib/server/credential-policy.js.map +1 -0
- package/dist/lib/server/decisioning/async-outcome.d.ts +17 -0
- package/dist/lib/server/decisioning/async-outcome.d.ts.map +1 -1
- package/dist/lib/server/decisioning/async-outcome.js +23 -18
- package/dist/lib/server/decisioning/async-outcome.js.map +1 -1
- package/dist/lib/server/decisioning/context.d.ts +8 -2
- package/dist/lib/server/decisioning/context.d.ts.map +1 -1
- package/dist/lib/server/decisioning/index.d.ts +1 -0
- package/dist/lib/server/decisioning/index.d.ts.map +1 -1
- package/dist/lib/server/decisioning/index.js.map +1 -1
- package/dist/lib/server/decisioning/runtime/from-platform.js +6 -4
- package/dist/lib/server/decisioning/runtime/from-platform.js.map +1 -1
- package/dist/lib/server/decisioning/runtime/postgres-task-registry.d.ts.map +1 -1
- package/dist/lib/server/decisioning/runtime/postgres-task-registry.js +5 -2
- package/dist/lib/server/decisioning/runtime/postgres-task-registry.js.map +1 -1
- package/dist/lib/server/decisioning/runtime/task-registry.d.ts +5 -0
- package/dist/lib/server/decisioning/runtime/task-registry.d.ts.map +1 -1
- package/dist/lib/server/decisioning/runtime/task-registry.js +4 -1
- package/dist/lib/server/decisioning/runtime/task-registry.js.map +1 -1
- package/dist/lib/server/decisioning/runtime/to-context.d.ts.map +1 -1
- package/dist/lib/server/decisioning/runtime/to-context.js +10 -2
- package/dist/lib/server/decisioning/runtime/to-context.js.map +1 -1
- package/dist/lib/server/dynamic-registry.d.ts +219 -0
- package/dist/lib/server/dynamic-registry.d.ts.map +1 -0
- package/dist/lib/server/dynamic-registry.js +245 -0
- package/dist/lib/server/dynamic-registry.js.map +1 -0
- package/dist/lib/server/index.d.ts +8 -0
- package/dist/lib/server/index.d.ts.map +1 -1
- package/dist/lib/server/index.js +15 -4
- package/dist/lib/server/index.js.map +1 -1
- package/dist/lib/server/operational-platform.d.ts +239 -0
- package/dist/lib/server/operational-platform.d.ts.map +1 -0
- package/dist/lib/server/operational-platform.js +94 -0
- package/dist/lib/server/operational-platform.js.map +1 -0
- package/dist/lib/server/test-controller.d.ts +2 -0
- package/dist/lib/server/test-controller.d.ts.map +1 -1
- package/dist/lib/server/test-controller.js +6 -11
- package/dist/lib/server/test-controller.js.map +1 -1
- package/dist/lib/server/wire-safe.d.ts +211 -0
- package/dist/lib/server/wire-safe.d.ts.map +1 -0
- package/dist/lib/server/wire-safe.js +231 -0
- package/dist/lib/server/wire-safe.js.map +1 -0
- package/dist/lib/server/wire-spec-fields.generated.d.ts +168 -0
- package/dist/lib/server/wire-spec-fields.generated.d.ts.map +1 -0
- package/dist/lib/server/wire-spec-fields.generated.js +172 -0
- package/dist/lib/server/wire-spec-fields.generated.js.map +1 -0
- package/dist/lib/testing/compliance/index.d.ts +2 -0
- package/dist/lib/testing/compliance/index.d.ts.map +1 -1
- package/dist/lib/testing/compliance/index.js +6 -1
- package/dist/lib/testing/compliance/index.js.map +1 -1
- package/dist/lib/testing/compliance/summary.d.ts +77 -0
- package/dist/lib/testing/compliance/summary.d.ts.map +1 -0
- package/dist/lib/testing/compliance/summary.js +176 -0
- package/dist/lib/testing/compliance/summary.js.map +1 -0
- package/dist/lib/testing/comply-controller.d.ts +2 -0
- package/dist/lib/testing/comply-controller.d.ts.map +1 -1
- package/dist/lib/testing/comply-controller.js.map +1 -1
- package/dist/lib/testing/storyboard/compliance.d.ts +26 -0
- package/dist/lib/testing/storyboard/compliance.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/compliance.js +51 -0
- package/dist/lib/testing/storyboard/compliance.js.map +1 -1
- package/dist/lib/testing/storyboard/index.d.ts +2 -2
- package/dist/lib/testing/storyboard/index.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/index.js +4 -2
- package/dist/lib/testing/storyboard/index.js.map +1 -1
- package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/runner.js +58 -5
- package/dist/lib/testing/storyboard/runner.js.map +1 -1
- package/dist/lib/version.d.ts +3 -3
- package/dist/lib/version.d.ts.map +1 -1
- package/dist/lib/version.js +3 -3
- package/dist/lib/version.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,442 @@
|
|
|
1
|
+
id: media_buy_state_machine
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Media buy state machine lifecycle"
|
|
4
|
+
category: media_buy_state_machine
|
|
5
|
+
summary: "Validates media buy state transitions: create, pause, resume, cancel, and terminal state enforcement."
|
|
6
|
+
track: media_buy
|
|
7
|
+
required_tools:
|
|
8
|
+
- create_media_buy
|
|
9
|
+
- update_media_buy
|
|
10
|
+
|
|
11
|
+
narrative: |
|
|
12
|
+
A media buy has a well-defined state machine: pending_creatives, pending_start, active,
|
|
13
|
+
paused, completed, rejected, canceled. Transitions between states must follow the spec — you cannot
|
|
14
|
+
resume a canceled buy or pause a completed one.
|
|
15
|
+
|
|
16
|
+
This storyboard creates a media buy, walks it through pause/resume/cancel transitions, then
|
|
17
|
+
verifies that the agent rejects updates to a buy in a terminal state (canceled or completed).
|
|
18
|
+
It also tests package-level pause/resume independent of the media buy status.
|
|
19
|
+
|
|
20
|
+
The state machine is the backbone of media buy reliability. If an agent allows invalid
|
|
21
|
+
transitions, buyers cannot trust the status field and automation breaks down.
|
|
22
|
+
|
|
23
|
+
agent:
|
|
24
|
+
interaction_model: media_buy_seller
|
|
25
|
+
capabilities:
|
|
26
|
+
- sells_media
|
|
27
|
+
- accepts_briefs
|
|
28
|
+
examples:
|
|
29
|
+
- "Any AdCP seller with media buy support"
|
|
30
|
+
|
|
31
|
+
caller:
|
|
32
|
+
role: buyer_agent
|
|
33
|
+
example: "Scope3 (DSP)"
|
|
34
|
+
|
|
35
|
+
prerequisites:
|
|
36
|
+
description: |
|
|
37
|
+
The caller needs a brand identity for account setup. The test creates a media buy
|
|
38
|
+
using discovered products, then exercises state transitions.
|
|
39
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
40
|
+
|
|
41
|
+
phases:
|
|
42
|
+
- id: capability_discovery
|
|
43
|
+
title: "Capability discovery"
|
|
44
|
+
narrative: |
|
|
45
|
+
The buyer calls get_adcp_capabilities to confirm the agent supports media buying before sending briefs or creating buys.
|
|
46
|
+
|
|
47
|
+
steps:
|
|
48
|
+
- id: get_capabilities
|
|
49
|
+
title: "Check agent capabilities"
|
|
50
|
+
narrative: |
|
|
51
|
+
Verify that the agent declares the expected protocol support before
|
|
52
|
+
proceeding with domain-specific operations.
|
|
53
|
+
task: get_adcp_capabilities
|
|
54
|
+
schema_ref: "protocol/get-adcp-capabilities-request.json"
|
|
55
|
+
response_schema_ref: "protocol/get-adcp-capabilities-response.json"
|
|
56
|
+
doc_ref: "/protocol/get_adcp_capabilities"
|
|
57
|
+
comply_scenario: capability_discovery
|
|
58
|
+
stateful: false
|
|
59
|
+
expected: |
|
|
60
|
+
Return capabilities declaring media_buy in supported_protocols, confirming the agent sells media.
|
|
61
|
+
sample_request:
|
|
62
|
+
context:
|
|
63
|
+
correlation_id: "media_buy_state_machine--get_capabilities"
|
|
64
|
+
validations:
|
|
65
|
+
- check: response_schema
|
|
66
|
+
description: "Response matches get-adcp-capabilities-response.json schema"
|
|
67
|
+
- check: field_present
|
|
68
|
+
path: "supported_protocols"
|
|
69
|
+
description: "Agent declares supported protocols"
|
|
70
|
+
|
|
71
|
+
- check: field_present
|
|
72
|
+
path: "context"
|
|
73
|
+
description: "Response echoes back the context object"
|
|
74
|
+
- check: field_value
|
|
75
|
+
path: "context.correlation_id"
|
|
76
|
+
value: "media_buy_state_machine--get_capabilities"
|
|
77
|
+
description: "Context correlation_id returned unchanged"
|
|
78
|
+
- id: setup
|
|
79
|
+
title: "Create a media buy"
|
|
80
|
+
narrative: |
|
|
81
|
+
Discover products and create a media buy to use for state transition testing.
|
|
82
|
+
The media buy ID is captured and passed to subsequent phases.
|
|
83
|
+
|
|
84
|
+
steps:
|
|
85
|
+
- id: discover_products
|
|
86
|
+
title: "Discover products for media buy"
|
|
87
|
+
narrative: |
|
|
88
|
+
Send a brief to get available products with pricing options. The first product
|
|
89
|
+
with a pricing option will be used to create the test media buy.
|
|
90
|
+
task: get_products
|
|
91
|
+
schema_ref: "media-buy/get-products-request.json"
|
|
92
|
+
response_schema_ref: "media-buy/get-products-response.json"
|
|
93
|
+
doc_ref: "/media-buy/task-reference/get_products"
|
|
94
|
+
comply_scenario: full_sales_flow
|
|
95
|
+
stateful: false
|
|
96
|
+
expected: |
|
|
97
|
+
Return products with:
|
|
98
|
+
- product_id
|
|
99
|
+
- pricing_options with pricing_option_id
|
|
100
|
+
|
|
101
|
+
sample_request:
|
|
102
|
+
buying_mode: "brief"
|
|
103
|
+
brief: "Display advertising products for state machine testing"
|
|
104
|
+
brand:
|
|
105
|
+
domain: "acmeoutdoor.example"
|
|
106
|
+
|
|
107
|
+
context:
|
|
108
|
+
correlation_id: "media_buy_state_machine--discover_products"
|
|
109
|
+
context_outputs:
|
|
110
|
+
- name: product_id
|
|
111
|
+
path: 'products[0].product_id'
|
|
112
|
+
- name: pricing_option_id
|
|
113
|
+
path: 'products[0].pricing_options[0].pricing_option_id'
|
|
114
|
+
validations:
|
|
115
|
+
- check: response_schema
|
|
116
|
+
description: "Response matches get-products-response.json schema"
|
|
117
|
+
- check: field_present
|
|
118
|
+
path: "products[0].product_id"
|
|
119
|
+
description: "At least one product with a product_id"
|
|
120
|
+
|
|
121
|
+
- check: field_present
|
|
122
|
+
path: "context"
|
|
123
|
+
description: "Response echoes back the context object"
|
|
124
|
+
- check: field_value
|
|
125
|
+
path: "context.correlation_id"
|
|
126
|
+
value: "media_buy_state_machine--discover_products"
|
|
127
|
+
description: "Context correlation_id returned unchanged"
|
|
128
|
+
- check: field_present
|
|
129
|
+
path: "products[0].format_ids"
|
|
130
|
+
description: "Products include format_ids for creative requirements"
|
|
131
|
+
- check: field_present
|
|
132
|
+
path: "products[0].format_ids[0].agent_url"
|
|
133
|
+
description: "Format IDs include agent_url — must match this agent's URL"
|
|
134
|
+
- check: field_present
|
|
135
|
+
path: "products[0].format_ids[0].id"
|
|
136
|
+
description: "Format IDs include id — must be accepted back in sync_creatives"
|
|
137
|
+
- id: create_buy
|
|
138
|
+
title: "Create the test media buy"
|
|
139
|
+
narrative: |
|
|
140
|
+
Create a media buy using the discovered product. This buy will be used for
|
|
141
|
+
all subsequent state transition tests.
|
|
142
|
+
task: create_media_buy
|
|
143
|
+
schema_ref: "media-buy/create-media-buy-request.json"
|
|
144
|
+
response_schema_ref: "media-buy/create-media-buy-response.json"
|
|
145
|
+
doc_ref: "/media-buy/task-reference/create_media_buy"
|
|
146
|
+
comply_scenario: create_media_buy
|
|
147
|
+
stateful: true
|
|
148
|
+
expected: |
|
|
149
|
+
Return an active media buy with:
|
|
150
|
+
- media_buy_id
|
|
151
|
+
- status: active
|
|
152
|
+
|
|
153
|
+
sample_request:
|
|
154
|
+
account:
|
|
155
|
+
brand:
|
|
156
|
+
domain: "acmeoutdoor.example"
|
|
157
|
+
operator: "pinnacle-agency.example"
|
|
158
|
+
brand:
|
|
159
|
+
domain: "acmeoutdoor.example"
|
|
160
|
+
start_time: "2026-05-01T00:00:00Z"
|
|
161
|
+
end_time: "2026-05-31T23:59:59Z"
|
|
162
|
+
packages:
|
|
163
|
+
- product_id: "test-product"
|
|
164
|
+
budget: 10000
|
|
165
|
+
pricing_option_id: "test-pricing"
|
|
166
|
+
|
|
167
|
+
idempotency_key: "$generate:uuid_v4#media_buy_state_machine_setup_create_buy"
|
|
168
|
+
context:
|
|
169
|
+
correlation_id: "media_buy_state_machine--create_buy"
|
|
170
|
+
context_outputs:
|
|
171
|
+
- name: media_buy_id
|
|
172
|
+
path: 'media_buy_id'
|
|
173
|
+
- name: package_id
|
|
174
|
+
path: 'packages[0].package_id'
|
|
175
|
+
validations:
|
|
176
|
+
- check: response_schema
|
|
177
|
+
description: "Response matches create-media-buy-response.json schema"
|
|
178
|
+
- check: field_present
|
|
179
|
+
path: "media_buy_id"
|
|
180
|
+
description: "Response includes a media_buy_id"
|
|
181
|
+
|
|
182
|
+
- check: field_present
|
|
183
|
+
path: "context"
|
|
184
|
+
description: "Response echoes back the context object"
|
|
185
|
+
- check: field_value
|
|
186
|
+
path: "context.correlation_id"
|
|
187
|
+
value: "media_buy_state_machine--create_buy"
|
|
188
|
+
description: "Context correlation_id returned unchanged"
|
|
189
|
+
- check: field_present
|
|
190
|
+
path: "packages[0].package_id"
|
|
191
|
+
description: "Seller assigns package_id — must be echoed in update_media_buy"
|
|
192
|
+
- id: state_transitions
|
|
193
|
+
title: "Valid state transitions"
|
|
194
|
+
narrative: |
|
|
195
|
+
Exercise the valid state transitions: pause, resume, and cancel. Each transition
|
|
196
|
+
must update the status field correctly.
|
|
197
|
+
|
|
198
|
+
steps:
|
|
199
|
+
- id: pause_buy
|
|
200
|
+
title: "Pause the media buy"
|
|
201
|
+
narrative: |
|
|
202
|
+
Pause the active media buy. The status should transition to paused.
|
|
203
|
+
task: update_media_buy
|
|
204
|
+
schema_ref: "media-buy/update-media-buy-request.json"
|
|
205
|
+
response_schema_ref: "media-buy/update-media-buy-response.json"
|
|
206
|
+
doc_ref: "/media-buy/task-reference/update_media_buy"
|
|
207
|
+
comply_scenario: media_buy_lifecycle
|
|
208
|
+
stateful: true
|
|
209
|
+
expected: |
|
|
210
|
+
Media buy status transitions to paused.
|
|
211
|
+
|
|
212
|
+
sample_request:
|
|
213
|
+
account:
|
|
214
|
+
brand:
|
|
215
|
+
domain: "acmeoutdoor.example"
|
|
216
|
+
operator: "pinnacle-agency.example"
|
|
217
|
+
media_buy_id: "$context.media_buy_id"
|
|
218
|
+
paused: true
|
|
219
|
+
|
|
220
|
+
idempotency_key: "$generate:uuid_v4#media_buy_state_machine_state_transitions_pause_buy"
|
|
221
|
+
context:
|
|
222
|
+
correlation_id: "media_buy_state_machine--pause_buy"
|
|
223
|
+
validations:
|
|
224
|
+
- check: field_present
|
|
225
|
+
path: "status"
|
|
226
|
+
description: "Response includes updated status"
|
|
227
|
+
|
|
228
|
+
- check: field_present
|
|
229
|
+
path: "context"
|
|
230
|
+
description: "Response echoes back the context object"
|
|
231
|
+
- check: field_value
|
|
232
|
+
path: "context.correlation_id"
|
|
233
|
+
value: "media_buy_state_machine--pause_buy"
|
|
234
|
+
description: "Context correlation_id returned unchanged"
|
|
235
|
+
- id: resume_buy
|
|
236
|
+
title: "Resume the media buy"
|
|
237
|
+
narrative: |
|
|
238
|
+
Resume the paused media buy. The status should transition back to active.
|
|
239
|
+
task: update_media_buy
|
|
240
|
+
schema_ref: "media-buy/update-media-buy-request.json"
|
|
241
|
+
response_schema_ref: "media-buy/update-media-buy-response.json"
|
|
242
|
+
doc_ref: "/media-buy/task-reference/update_media_buy"
|
|
243
|
+
comply_scenario: media_buy_lifecycle
|
|
244
|
+
stateful: true
|
|
245
|
+
expected: |
|
|
246
|
+
Media buy status transitions back to active.
|
|
247
|
+
|
|
248
|
+
sample_request:
|
|
249
|
+
account:
|
|
250
|
+
brand:
|
|
251
|
+
domain: "acmeoutdoor.example"
|
|
252
|
+
operator: "pinnacle-agency.example"
|
|
253
|
+
media_buy_id: "$context.media_buy_id"
|
|
254
|
+
paused: false
|
|
255
|
+
|
|
256
|
+
idempotency_key: "$generate:uuid_v4#media_buy_state_machine_state_transitions_resume_buy"
|
|
257
|
+
context:
|
|
258
|
+
correlation_id: "media_buy_state_machine--resume_buy"
|
|
259
|
+
validations:
|
|
260
|
+
- check: field_present
|
|
261
|
+
path: "status"
|
|
262
|
+
description: "Response includes updated status"
|
|
263
|
+
|
|
264
|
+
- check: field_present
|
|
265
|
+
path: "context"
|
|
266
|
+
description: "Response echoes back the context object"
|
|
267
|
+
- check: field_value
|
|
268
|
+
path: "context.correlation_id"
|
|
269
|
+
value: "media_buy_state_machine--resume_buy"
|
|
270
|
+
description: "Context correlation_id returned unchanged"
|
|
271
|
+
- id: cancel_buy
|
|
272
|
+
title: "Cancel the media buy"
|
|
273
|
+
narrative: |
|
|
274
|
+
Cancel the media buy. This is a terminal transition — the buy cannot be
|
|
275
|
+
resumed or modified after cancellation.
|
|
276
|
+
task: update_media_buy
|
|
277
|
+
schema_ref: "media-buy/update-media-buy-request.json"
|
|
278
|
+
response_schema_ref: "media-buy/update-media-buy-response.json"
|
|
279
|
+
doc_ref: "/media-buy/task-reference/update_media_buy"
|
|
280
|
+
comply_scenario: media_buy_lifecycle
|
|
281
|
+
stateful: true
|
|
282
|
+
expected: |
|
|
283
|
+
Media buy status transitions to canceled. This is terminal.
|
|
284
|
+
|
|
285
|
+
sample_request:
|
|
286
|
+
account:
|
|
287
|
+
brand:
|
|
288
|
+
domain: "acmeoutdoor.example"
|
|
289
|
+
operator: "pinnacle-agency.example"
|
|
290
|
+
media_buy_id: "$context.media_buy_id"
|
|
291
|
+
canceled: true
|
|
292
|
+
|
|
293
|
+
idempotency_key: "$generate:uuid_v4#media_buy_state_machine_state_transitions_cancel_buy"
|
|
294
|
+
context:
|
|
295
|
+
correlation_id: "media_buy_state_machine--cancel_buy"
|
|
296
|
+
validations:
|
|
297
|
+
- check: field_present
|
|
298
|
+
path: "status"
|
|
299
|
+
description: "Response includes canceled status"
|
|
300
|
+
|
|
301
|
+
- check: field_present
|
|
302
|
+
path: "context"
|
|
303
|
+
description: "Response echoes back the context object"
|
|
304
|
+
- check: field_value
|
|
305
|
+
path: "context.correlation_id"
|
|
306
|
+
value: "media_buy_state_machine--cancel_buy"
|
|
307
|
+
description: "Context correlation_id returned unchanged"
|
|
308
|
+
- id: terminal_enforcement
|
|
309
|
+
title: "Terminal state enforcement"
|
|
310
|
+
narrative: |
|
|
311
|
+
Verify that the agent rejects state transitions on a canceled media buy. Pausing
|
|
312
|
+
or resuming a terminal buy returns INVALID_STATE (generic terminal-state rule).
|
|
313
|
+
Re-canceling a terminal buy returns NOT_CANCELLABLE — the cancellation-specific
|
|
314
|
+
code takes precedence over the generic INVALID_STATE when the attempted
|
|
315
|
+
transition is itself a cancellation. Non-cancellation illegal transitions into
|
|
316
|
+
or out of terminal states still return INVALID_STATE.
|
|
317
|
+
|
|
318
|
+
steps:
|
|
319
|
+
- id: pause_canceled_buy
|
|
320
|
+
title: "Reject pause on canceled buy"
|
|
321
|
+
narrative: |
|
|
322
|
+
Attempt to pause a canceled media buy. The agent must reject this with
|
|
323
|
+
INVALID_STATE.
|
|
324
|
+
task: update_media_buy
|
|
325
|
+
schema_ref: "media-buy/update-media-buy-request.json"
|
|
326
|
+
response_schema_ref: "media-buy/update-media-buy-response.json"
|
|
327
|
+
doc_ref: "/media-buy/task-reference/update_media_buy"
|
|
328
|
+
comply_scenario: terminal_state_enforcement
|
|
329
|
+
expect_error: true
|
|
330
|
+
negative_path: payload_well_formed
|
|
331
|
+
stateful: true
|
|
332
|
+
expected: |
|
|
333
|
+
Reject with INVALID_STATE — cannot pause a canceled buy.
|
|
334
|
+
|
|
335
|
+
sample_request:
|
|
336
|
+
account:
|
|
337
|
+
brand:
|
|
338
|
+
domain: "acmeoutdoor.example"
|
|
339
|
+
operator: "pinnacle-agency.example"
|
|
340
|
+
media_buy_id: "$context.media_buy_id"
|
|
341
|
+
paused: true
|
|
342
|
+
idempotency_key: "$generate:uuid_v4#pause_canceled_buy"
|
|
343
|
+
|
|
344
|
+
context:
|
|
345
|
+
correlation_id: "media_buy_state_machine--pause_canceled_buy"
|
|
346
|
+
validations:
|
|
347
|
+
- check: error_code
|
|
348
|
+
allowed_values: ["INVALID_STATE"]
|
|
349
|
+
description: "Invalid transition rejected with INVALID_STATE"
|
|
350
|
+
|
|
351
|
+
- check: field_present
|
|
352
|
+
path: "context"
|
|
353
|
+
description: "Response echoes back the context object"
|
|
354
|
+
- check: field_value
|
|
355
|
+
path: "context.correlation_id"
|
|
356
|
+
value: "media_buy_state_machine--pause_canceled_buy"
|
|
357
|
+
description: "Context correlation_id returned unchanged"
|
|
358
|
+
- id: resume_canceled_buy
|
|
359
|
+
title: "Reject resume on canceled buy"
|
|
360
|
+
narrative: |
|
|
361
|
+
Attempt to resume a canceled media buy. The agent must reject this with
|
|
362
|
+
INVALID_STATE.
|
|
363
|
+
task: update_media_buy
|
|
364
|
+
schema_ref: "media-buy/update-media-buy-request.json"
|
|
365
|
+
response_schema_ref: "media-buy/update-media-buy-response.json"
|
|
366
|
+
doc_ref: "/media-buy/task-reference/update_media_buy"
|
|
367
|
+
comply_scenario: terminal_state_enforcement
|
|
368
|
+
expect_error: true
|
|
369
|
+
negative_path: payload_well_formed
|
|
370
|
+
stateful: true
|
|
371
|
+
expected: |
|
|
372
|
+
Reject with INVALID_STATE — cannot resume a canceled buy.
|
|
373
|
+
|
|
374
|
+
sample_request:
|
|
375
|
+
account:
|
|
376
|
+
brand:
|
|
377
|
+
domain: "acmeoutdoor.example"
|
|
378
|
+
operator: "pinnacle-agency.example"
|
|
379
|
+
media_buy_id: "$context.media_buy_id"
|
|
380
|
+
paused: false
|
|
381
|
+
idempotency_key: "$generate:uuid_v4#resume_canceled_buy"
|
|
382
|
+
|
|
383
|
+
context:
|
|
384
|
+
correlation_id: "media_buy_state_machine--resume_canceled_buy"
|
|
385
|
+
validations:
|
|
386
|
+
- check: error_code
|
|
387
|
+
allowed_values: ["INVALID_STATE"]
|
|
388
|
+
description: "Invalid transition rejected with INVALID_STATE"
|
|
389
|
+
|
|
390
|
+
- check: field_present
|
|
391
|
+
path: "context"
|
|
392
|
+
description: "Response echoes back the context object"
|
|
393
|
+
- check: field_value
|
|
394
|
+
path: "context.correlation_id"
|
|
395
|
+
value: "media_buy_state_machine--resume_canceled_buy"
|
|
396
|
+
description: "Context correlation_id returned unchanged"
|
|
397
|
+
- id: recancel_buy
|
|
398
|
+
title: "Reject re-cancel of canceled buy with NOT_CANCELLABLE"
|
|
399
|
+
narrative: |
|
|
400
|
+
Attempt to cancel an already-canceled media buy. The agent MUST reject
|
|
401
|
+
this with NOT_CANCELLABLE. The cancellation-specific code takes
|
|
402
|
+
precedence over the generic terminal-state INVALID_STATE when the
|
|
403
|
+
terminal update is itself a cancellation attempt — see §128/§129 of
|
|
404
|
+
the media-buy specification and media_buy_seller/invalid_transitions
|
|
405
|
+
for the canonical vector. Idempotent acceptance is NOT conformant for
|
|
406
|
+
this case.
|
|
407
|
+
task: update_media_buy
|
|
408
|
+
schema_ref: "media-buy/update-media-buy-request.json"
|
|
409
|
+
response_schema_ref: "media-buy/update-media-buy-response.json"
|
|
410
|
+
doc_ref: "/media-buy/task-reference/update_media_buy"
|
|
411
|
+
comply_scenario: terminal_state_enforcement
|
|
412
|
+
expect_error: true
|
|
413
|
+
negative_path: payload_well_formed
|
|
414
|
+
stateful: true
|
|
415
|
+
expected: |
|
|
416
|
+
Reject with:
|
|
417
|
+
- code: NOT_CANCELLABLE
|
|
418
|
+
- recovery: correctable
|
|
419
|
+
- context echoed unchanged
|
|
420
|
+
|
|
421
|
+
sample_request:
|
|
422
|
+
account:
|
|
423
|
+
brand:
|
|
424
|
+
domain: "acmeoutdoor.example"
|
|
425
|
+
operator: "pinnacle-agency.example"
|
|
426
|
+
media_buy_id: "$context.media_buy_id"
|
|
427
|
+
canceled: true
|
|
428
|
+
|
|
429
|
+
idempotency_key: "$generate:uuid_v4#media_buy_state_machine_terminal_enforcement_recancel_buy"
|
|
430
|
+
context:
|
|
431
|
+
correlation_id: "media_buy_state_machine--recancel_buy"
|
|
432
|
+
validations:
|
|
433
|
+
- check: error_code
|
|
434
|
+
value: "NOT_CANCELLABLE"
|
|
435
|
+
description: "Error code is NOT_CANCELLABLE on re-cancel of canceled buy"
|
|
436
|
+
- check: field_present
|
|
437
|
+
path: "context"
|
|
438
|
+
description: "Response echoes back the context object even on errors"
|
|
439
|
+
- check: field_value
|
|
440
|
+
path: "context.correlation_id"
|
|
441
|
+
value: "media_buy_state_machine--recancel_buy"
|
|
442
|
+
description: "Context correlation_id returned unchanged"
|