cli

Command-line interface for Radroots
git clone https://radroots.dev/git/cli.git
Log | Files | Refs | README | LICENSE

commit c1cce631a43f45abdf81bd22d478c3d9a18be951
parent 40090ccc3eea57a933fe4e8485644145e4650ea7
Author: triesap <tyson@radroots.org>
Date:   Wed, 29 Apr 2026 16:16:48 +0000

test: cover invalid order decision failures

- add invalid decision coverage for validation failure output
- assert operation id and lifecycle correlation fields in detail
- keep already-decided coverage paired with invalid state behavior
- verify order status parity tests remain green

Diffstat:
Msrc/operation_order.rs | 41+++++++++++++++++++++++++++++++++++++++--
1 file changed, 39 insertions(+), 2 deletions(-)

diff --git a/src/operation_order.rs b/src/operation_order.rs @@ -480,8 +480,9 @@ mod tests { use crate::domain::runtime::OrderDecisionView; use crate::operation_adapter::{ OperationAdapter, OperationContext, OperationData, OperationRequest, OrderAcceptRequest, - OrderAcceptResult, OrderDeclineRequest, OrderEventListRequest, OrderEventWatchRequest, - OrderGetRequest, OrderListRequest, OrderStatusGetRequest, OrderSubmitRequest, + OrderAcceptResult, OrderDeclineRequest, OrderDeclineResult, OrderEventListRequest, + OrderEventWatchRequest, OrderGetRequest, OrderListRequest, OrderStatusGetRequest, + OrderSubmitRequest, }; use crate::runtime::config::{ AccountConfig, AccountSecretContractConfig, HyfConfig, IdentityConfig, InteractionConfig, @@ -598,6 +599,31 @@ mod tests { } #[test] + fn order_decision_invalid_maps_to_validation_failure() { + let view = invalid_decision_view(); + let error = match decision_result::<OrderDeclineResult>("order.decline", &view) { + Ok(_) => panic!("invalid view should fail validation"), + Err(error) => error, + }; + let output_error = error.to_output_error(); + + assert_eq!(output_error.code, "validation_failed"); + assert_eq!(output_error.exit_code, 10); + assert_eq!( + output_error.message, + "active order events for `ord_test` failed reducer validation" + ); + let detail = output_error.detail.expect("validation detail"); + assert_eq!(detail["state"], "invalid"); + assert_eq!(detail["operation_id"], "order.decline"); + assert_eq!(detail["listing_event_id"], "l".repeat(64)); + assert_eq!(detail["event_id"], Value::Null); + assert_eq!(detail["event_kind"], Value::Null); + assert_eq!(detail["idempotency_key"], "idem_test"); + assert_eq!(detail["signer_mode"], "local"); + } + + #[test] fn order_decline_requires_reason_before_approval() { let dir = tempdir().expect("tempdir"); let config = sample_config(dir.path()); @@ -822,4 +848,15 @@ mod tests { actions: vec!["radroots order status get ord_test".to_owned()], } } + + fn invalid_decision_view() -> OrderDecisionView { + let mut view = already_decided_view(); + view.state = "invalid".to_owned(); + view.decision = "declined".to_owned(); + view.event_id = None; + view.event_kind = None; + view.reason = + Some("active order events for `ord_test` failed reducer validation".to_owned()); + view + } }