commit 6655a36134f0e22237006c91cd210f5610e3f329
parent f79415c78ea2080a3eb518023f307a3e53d91b7e
Author: triesap <tyson@radroots.org>
Date: Wed, 15 Jul 2026 15:53:04 +0000
runtime: align sdk signer and workflow states
Diffstat:
16 files changed, 106 insertions(+), 115 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
@@ -5342,8 +5342,10 @@ dependencies = [
"radroots_nostr_connect",
"radroots_nostr_signer",
"radroots_outbox",
+ "radroots_protected_store",
"radroots_runtime_contract_v1",
"radroots_runtime_paths",
+ "radroots_secret_vault",
"radroots_trade",
"radroots_transport",
"radroots_transport_nostr",
diff --git a/crates/desktop/src/runtime.rs b/crates/desktop/src/runtime.rs
@@ -2921,11 +2921,7 @@ impl DesktopAppRuntimeState {
}
let lifecycle = self.resolve_order_lifecycle_evidence(&request)?;
if lifecycle.decision.is_some()
- || !matches!(
- lifecycle.status,
- RadrootsTradeWorkflowState::Requested
- | RadrootsTradeWorkflowState::RevisionProposed
- )
+ || !matches!(lifecycle.status, RadrootsTradeWorkflowState::Requested)
{
return Err(AppSqliteError::InvalidProjection {
reason: "buyer order revision requires active pre-agreement negotiation",
@@ -3075,8 +3071,7 @@ impl DesktopAppRuntimeState {
}
match lifecycle.status {
RadrootsTradeWorkflowState::Requested => {}
- RadrootsTradeWorkflowState::RevisionProposed
- | RadrootsTradeWorkflowState::AgreedPendingRhi
+ RadrootsTradeWorkflowState::AgreedPendingValidation
| RadrootsTradeWorkflowState::Committed => {
return Err(AppSqliteError::InvalidProjection {
reason: "buyer order cancellation requires an open pre-agreement order",
@@ -3085,6 +3080,7 @@ impl DesktopAppRuntimeState {
RadrootsTradeWorkflowState::Missing
| RadrootsTradeWorkflowState::Declined
| RadrootsTradeWorkflowState::Cancelled
+ | RadrootsTradeWorkflowState::ValidationExpired
| RadrootsTradeWorkflowState::Invalid => {
return Err(AppSqliteError::InvalidProjection {
reason: "buyer order cancellation requires an open pre-agreement order",
@@ -15556,7 +15552,7 @@ mod tests {
assert_eq!(persisted_order_status(&runtime, order_id), "needs_action");
assert_eq!(
persisted_order_workflow_agreement(&runtime, order_id),
- "agreed_pending_rhi"
+ "agreed_pending_validation"
);
assert_eq!(relay.event_count(), 1);
@@ -16294,7 +16290,7 @@ mod tests {
assert_eq!(detail.status, BuyerOrderStatus::Placed);
assert_eq!(
detail.workflow.agreement,
- TradeAgreementStatus::AgreedPendingRhi
+ TradeAgreementStatus::AgreedPendingValidation
);
assert_eq!(
detail.workflow.provenance.last_event_id.as_deref(),
diff --git a/crates/desktop/src/source_guards.rs b/crates/desktop/src/source_guards.rs
@@ -717,11 +717,11 @@ const REQUIRED_WINDOW_COPY_KEYS: &[&str] = &[
"AppTextKey::TradeWorkflowAxisInventory",
"AppTextKey::TradeWorkflowAxisSource",
"AppTextKey::TradeWorkflowAgreementRequested",
- "AppTextKey::TradeWorkflowAgreementRevisionProposed",
- "AppTextKey::TradeWorkflowAgreementAgreedPendingRhi",
+ "AppTextKey::TradeWorkflowAgreementAgreedPendingValidation",
"AppTextKey::TradeWorkflowAgreementCommitted",
"AppTextKey::TradeWorkflowAgreementDeclined",
"AppTextKey::TradeWorkflowAgreementCancelled",
+ "AppTextKey::TradeWorkflowAgreementValidationExpired",
"AppTextKey::TradeWorkflowAgreementInvalid",
"AppTextKey::TradeWorkflowRevisionNone",
"AppTextKey::TradeWorkflowRevisionChangeProposed",
@@ -1544,7 +1544,7 @@ fn app_store_validation_receipts_do_not_commit_without_trust_policy() {
let branch = &source[start..end];
assert!(branch.contains("OrderStatus::NeedsAction.storage_key()"));
- assert!(branch.contains("TradeAgreementStatus::AgreedPendingRhi.storage_key()"));
+ assert!(branch.contains("TradeAgreementStatus::AgreedPendingValidation.storage_key()"));
assert!(branch.contains("TradeInventoryStatus::Reserved.storage_key()"));
assert!(!branch.contains("OrderStatus::Scheduled.storage_key()"));
assert!(!branch.contains("TradeAgreementStatus::Committed.storage_key()"));
diff --git a/crates/desktop/src/window.rs b/crates/desktop/src/window.rs
@@ -11668,15 +11668,15 @@ fn trade_workflow_value_badge(value_key: AppTextKey) -> AnyElement {
fn trade_agreement_status_key(status: TradeAgreementStatus) -> AppTextKey {
match status {
TradeAgreementStatus::Requested => AppTextKey::TradeWorkflowAgreementRequested,
- TradeAgreementStatus::RevisionProposed => {
- AppTextKey::TradeWorkflowAgreementRevisionProposed
- }
- TradeAgreementStatus::AgreedPendingRhi => {
- AppTextKey::TradeWorkflowAgreementAgreedPendingRhi
+ TradeAgreementStatus::AgreedPendingValidation => {
+ AppTextKey::TradeWorkflowAgreementAgreedPendingValidation
}
TradeAgreementStatus::Committed => AppTextKey::TradeWorkflowAgreementCommitted,
TradeAgreementStatus::Declined => AppTextKey::TradeWorkflowAgreementDeclined,
TradeAgreementStatus::Cancelled => AppTextKey::TradeWorkflowAgreementCancelled,
+ TradeAgreementStatus::ValidationExpired => {
+ AppTextKey::TradeWorkflowAgreementValidationExpired
+ }
TradeAgreementStatus::Invalid => AppTextKey::TradeWorkflowAgreementInvalid,
}
}
@@ -16789,12 +16789,8 @@ mod tests {
AppTextKey::TradeWorkflowAgreementRequested,
),
(
- TradeAgreementStatus::RevisionProposed,
- AppTextKey::TradeWorkflowAgreementRevisionProposed,
- ),
- (
- TradeAgreementStatus::AgreedPendingRhi,
- AppTextKey::TradeWorkflowAgreementAgreedPendingRhi,
+ TradeAgreementStatus::AgreedPendingValidation,
+ AppTextKey::TradeWorkflowAgreementAgreedPendingValidation,
),
(
TradeAgreementStatus::Committed,
@@ -16809,6 +16805,10 @@ mod tests {
AppTextKey::TradeWorkflowAgreementCancelled,
),
(
+ TradeAgreementStatus::ValidationExpired,
+ AppTextKey::TradeWorkflowAgreementValidationExpired,
+ ),
+ (
TradeAgreementStatus::Invalid,
AppTextKey::TradeWorkflowAgreementInvalid,
),
diff --git a/crates/i18n/src/keys.rs b/crates/i18n/src/keys.rs
@@ -433,11 +433,11 @@ define_app_text_keys! {
TradeWorkflowAxisInventory => "trade.workflow.axis.inventory",
TradeWorkflowAxisSource => "trade.workflow.axis.source",
TradeWorkflowAgreementRequested => "trade.workflow.agreement.requested",
- TradeWorkflowAgreementRevisionProposed => "trade.workflow.agreement.revision_proposed",
- TradeWorkflowAgreementAgreedPendingRhi => "trade.workflow.agreement.agreed_pending_rhi",
+ TradeWorkflowAgreementAgreedPendingValidation => "trade.workflow.agreement.agreed_pending_validation",
TradeWorkflowAgreementCommitted => "trade.workflow.agreement.committed",
TradeWorkflowAgreementDeclined => "trade.workflow.agreement.declined",
TradeWorkflowAgreementCancelled => "trade.workflow.agreement.cancelled",
+ TradeWorkflowAgreementValidationExpired => "trade.workflow.agreement.validation_expired",
TradeWorkflowAgreementInvalid => "trade.workflow.agreement.invalid",
TradeWorkflowRevisionNone => "trade.workflow.revision.none",
TradeWorkflowRevisionChangeProposed => "trade.workflow.revision.change_proposed",
diff --git a/crates/i18n/src/lib.rs b/crates/i18n/src/lib.rs
@@ -639,11 +639,7 @@ mod tests {
"Requested"
);
assert_eq!(
- app_text(AppTextKey::TradeWorkflowAgreementRevisionProposed),
- "Revision proposed"
- );
- assert_eq!(
- app_text(AppTextKey::TradeWorkflowAgreementAgreedPendingRhi),
+ app_text(AppTextKey::TradeWorkflowAgreementAgreedPendingValidation),
"Pending validation"
);
assert_eq!(
@@ -651,6 +647,10 @@ mod tests {
"Committed"
);
assert_eq!(
+ app_text(AppTextKey::TradeWorkflowAgreementValidationExpired),
+ "Validation expired"
+ );
+ assert_eq!(
app_text(AppTextKey::TradeWorkflowAgreementInvalid),
"Invalid"
);
diff --git a/crates/runtime/src/sdk.rs b/crates/runtime/src/sdk.rs
@@ -1387,7 +1387,10 @@ async fn build_sdk_runtime_with_signer(
config: &AppSdkConfig,
keys: RadrootsNostrKeys,
) -> Result<RadrootsClient, AppSdkRuntimeIssue> {
- let signer = RadrootsSdkLocalKeySigner::new(keys)
+ let local_signer = RadrootsLocalEventSigner::new(keys).map_err(|error| {
+ AppSdkRuntimeIssue::runtime_error("sdk_signer_init_failed", error.to_string())
+ })?;
+ let signer = RadrootsSdkLocalKeySigner::from_event_signer(local_signer)
.map_err(|error| AppSdkRuntimeIssue::from_sdk_error(&error))?;
let transport_profile = app_transport_profile(config)
.map_err(|error| AppSdkRuntimeIssue::from_sdk_error(&error))?;
diff --git a/crates/store/migrations/0023_order_workflow_display_projection.sql b/crates/store/migrations/0023_order_workflow_display_projection.sql
@@ -1,6 +1,6 @@
ALTER TABLE orders
ADD COLUMN workflow_agreement TEXT NOT NULL DEFAULT 'requested' CHECK (
- workflow_agreement IN ('requested', 'revision_proposed', 'agreed_pending_rhi', 'committed', 'declined', 'cancelled', 'invalid')
+ workflow_agreement IN ('requested', 'agreed_pending_validation', 'committed', 'declined', 'cancelled', 'validation_expired', 'invalid')
);
ALTER TABLE orders
diff --git a/crates/store/migrations/0025_order_workflow_agreement_projection.sql b/crates/store/migrations/0025_order_workflow_agreement_projection.sql
@@ -27,7 +27,7 @@ CREATE TABLE orders (
workflow_revision IN ('none', 'change_proposed', 'updated', 'kept_as_placed')
),
workflow_agreement TEXT NOT NULL DEFAULT 'requested' CHECK (
- workflow_agreement IN ('requested', 'revision_proposed', 'agreed_pending_rhi', 'committed', 'declined', 'cancelled', 'invalid')
+ workflow_agreement IN ('requested', 'agreed_pending_validation', 'committed', 'declined', 'cancelled', 'validation_expired', 'invalid')
),
workflow_inventory TEXT NOT NULL DEFAULT 'needs_review' CHECK (
workflow_inventory IN ('available', 'reserved', 'sold_out', 'needs_review')
@@ -69,13 +69,7 @@ SELECT
buyer_phone,
buyer_order_note,
workflow_revision,
- CASE workflow_agreement
- WHEN 'ordered' THEN 'requested'
- WHEN 'pending_rhi' THEN 'agreed_pending_rhi'
- WHEN 'confirmed' THEN 'committed'
- WHEN 'needs_review' THEN 'invalid'
- ELSE workflow_agreement
- END,
+ workflow_agreement,
workflow_inventory,
workflow_provenance_source,
workflow_provenance_last_event_id
diff --git a/crates/store/migrations/0029_order_workflow_validation_receipt_agreement.sql b/crates/store/migrations/0029_order_workflow_validation_receipt_agreement.sql
@@ -30,7 +30,7 @@ CREATE TABLE orders (
workflow_revision IN ('none', 'change_proposed', 'updated', 'kept_as_placed')
),
workflow_agreement TEXT NOT NULL DEFAULT 'requested' CHECK (
- workflow_agreement IN ('requested', 'revision_proposed', 'agreed_pending_rhi', 'committed', 'declined', 'cancelled', 'invalid')
+ workflow_agreement IN ('requested', 'agreed_pending_validation', 'committed', 'declined', 'cancelled', 'validation_expired', 'invalid')
),
workflow_inventory TEXT NOT NULL DEFAULT 'needs_review' CHECK (
workflow_inventory IN ('available', 'reserved', 'sold_out', 'needs_review')
@@ -72,13 +72,7 @@ SELECT
buyer_phone,
buyer_order_note,
workflow_revision,
- CASE workflow_agreement
- WHEN 'ordered' THEN 'requested'
- WHEN 'pending_rhi' THEN 'agreed_pending_rhi'
- WHEN 'confirmed' THEN 'committed'
- WHEN 'needs_review' THEN 'invalid'
- ELSE workflow_agreement
- END,
+ workflow_agreement,
workflow_inventory,
workflow_provenance_source,
workflow_provenance_last_event_id
diff --git a/crates/store/src/interop.rs b/crates/store/src/interop.rs
@@ -1489,7 +1489,7 @@ impl<'a> AppLocalInteropRepository<'a> {
};
if !matches!(
agreement.as_str(),
- value if value == TradeAgreementStatus::AgreedPendingRhi.storage_key()
+ value if value == TradeAgreementStatus::AgreedPendingValidation.storage_key()
|| value == TradeAgreementStatus::Committed.storage_key()
|| value == TradeAgreementStatus::Invalid.storage_key()
) {
@@ -1527,7 +1527,7 @@ impl<'a> AppLocalInteropRepository<'a> {
let (status, agreement, inventory) = match result.as_str() {
"valid" => (
OrderStatus::NeedsAction.storage_key(),
- TradeAgreementStatus::AgreedPendingRhi.storage_key(),
+ TradeAgreementStatus::AgreedPendingValidation.storage_key(),
TradeInventoryStatus::Reserved.storage_key(),
),
"needs_review" => (
@@ -5278,7 +5278,7 @@ mod tests {
);
assert_eq!(
buyer_orders.rows[0].workflow.agreement,
- TradeAgreementStatus::AgreedPendingRhi
+ TradeAgreementStatus::AgreedPendingValidation
);
assert_eq!(
buyer_orders.rows[0].workflow.inventory,
@@ -5642,7 +5642,7 @@ mod tests {
assert_eq!(seller_orders.rows[0].status, OrderStatus::NeedsAction);
assert_eq!(
seller_orders.rows[0].workflow.agreement,
- TradeAgreementStatus::AgreedPendingRhi
+ TradeAgreementStatus::AgreedPendingValidation
);
assert_eq!(
seller_orders.rows[0].workflow.inventory,
@@ -5652,8 +5652,9 @@ mod tests {
}
#[test]
- fn valid_validation_receipt_keeps_buyer_and_seller_order_pending_rhi() {
- let fixture = validation_receipt_order_fixture("validation-receipt-valid-pending-rhi");
+ fn valid_validation_receipt_keeps_buyer_and_seller_order_pending_validation() {
+ let fixture =
+ validation_receipt_order_fixture("validation-receipt-valid-pending-validation");
let valid_event = validation_receipt_event(
hex_event_id(29).as_str(),
fixture.seller_pubkey.as_str(),
@@ -5667,7 +5668,7 @@ mod tests {
fixture
.events
.append_record(&signed_order_event_record(
- "cli:signed_event:validation-receipt:valid-pending-rhi",
+ "cli:signed_event:validation-receipt:valid-pending-validation",
&valid_event,
fixture.listing_addr.as_str(),
SourceRuntime::Cli,
@@ -5682,23 +5683,23 @@ mod tests {
let buyer_detail = fixture
.app_store
.load_buyer_order_detail(&fixture.buyer_context, fixture.order_id)
- .expect("load buyer pending-rhi validation receipt detail")
- .expect("buyer pending-rhi validation receipt detail");
+ .expect("load buyer pending-validation validation receipt detail")
+ .expect("buyer pending-validation validation receipt detail");
let seller_detail = fixture
.app_store
.load_order_detail(fixture.seller_farm_id, fixture.order_id)
- .expect("load seller pending-rhi validation receipt detail")
- .expect("seller pending-rhi validation receipt detail");
+ .expect("load seller pending-validation validation receipt detail")
+ .expect("seller pending-validation validation receipt detail");
assert_eq!(buyer_detail.status, BuyerOrderStatus::Placed);
assert_eq!(seller_detail.status, OrderStatus::NeedsAction);
assert_eq!(
buyer_detail.workflow.agreement,
- TradeAgreementStatus::AgreedPendingRhi
+ TradeAgreementStatus::AgreedPendingValidation
);
assert_eq!(
seller_detail.workflow.agreement,
- TradeAgreementStatus::AgreedPendingRhi
+ TradeAgreementStatus::AgreedPendingValidation
);
assert_eq!(
buyer_detail.workflow.inventory,
@@ -6084,7 +6085,7 @@ mod tests {
assert_eq!(seller_detail.status, OrderStatus::NeedsAction);
assert_eq!(
buyer_detail.workflow.agreement,
- TradeAgreementStatus::AgreedPendingRhi
+ TradeAgreementStatus::AgreedPendingValidation
);
assert_eq!(seller_detail.primary_action, None);
}
@@ -6254,7 +6255,7 @@ mod tests {
assert_eq!(seller_orders.rows[0].status, OrderStatus::NeedsAction);
assert_eq!(
seller_orders.rows[0].workflow.agreement,
- TradeAgreementStatus::AgreedPendingRhi
+ TradeAgreementStatus::AgreedPendingValidation
);
assert_eq!(
seller_orders.rows[0].workflow.revision,
diff --git a/crates/store/src/lib.rs b/crates/store/src/lib.rs
@@ -1193,18 +1193,18 @@ mod tests {
workflow_agreement,
workflow_inventory
) VALUES (
- 'order_agreed_pending_rhi',
+ 'order_agreed_pending_validation',
'farm_schema',
- 'agreed pending rhi',
+ 'agreed pending validation',
'Buyer',
'needs_action',
'2026-01-01T00:00:00Z',
- 'agreed_pending_rhi',
+ 'agreed_pending_validation',
'reserved'
)",
crate::empty_params(),
)
- .expect("pending rhi workflow projection should insert");
+ .expect("pending validation workflow projection should insert");
let invalid_result = connection.execute(
"INSERT INTO orders (
@@ -1354,10 +1354,10 @@ mod tests {
assert_eq!(status, "needs_review");
connection
.execute(
- "UPDATE orders SET workflow_agreement = 'agreed_pending_rhi' WHERE id = 'order_status'",
+ "UPDATE orders SET workflow_agreement = 'agreed_pending_validation' WHERE id = 'order_status'",
crate::empty_params(),
)
- .expect("agreed pending rhi agreement should satisfy current check");
+ .expect("agreed pending validation agreement should satisfy current check");
}
fn table_exists(connection: &AppSqliteDatabase, table_name: &str) -> bool {
diff --git a/crates/store/src/repo/orders.rs b/crates/store/src/repo/orders.rs
@@ -1181,7 +1181,7 @@ fn primary_action_for_order(
) -> Option<OrderPrimaryAction> {
match status {
OrderStatus::NeedsAction
- if workflow.agreement == TradeAgreementStatus::AgreedPendingRhi =>
+ if workflow.agreement == TradeAgreementStatus::AgreedPendingValidation =>
{
None
}
diff --git a/crates/store/src/repo/workflow.rs b/crates/store/src/repo/workflow.rs
@@ -39,11 +39,11 @@ fn parse_trade_agreement_status(
) -> Result<TradeAgreementStatus, AppSqliteError> {
match value.as_str() {
"requested" => Ok(TradeAgreementStatus::Requested),
- "revision_proposed" => Ok(TradeAgreementStatus::RevisionProposed),
- "agreed_pending_rhi" => Ok(TradeAgreementStatus::AgreedPendingRhi),
+ "agreed_pending_validation" => Ok(TradeAgreementStatus::AgreedPendingValidation),
"committed" => Ok(TradeAgreementStatus::Committed),
"declined" => Ok(TradeAgreementStatus::Declined),
"cancelled" => Ok(TradeAgreementStatus::Cancelled),
+ "validation_expired" => Ok(TradeAgreementStatus::ValidationExpired),
"invalid" => Ok(TradeAgreementStatus::Invalid),
_ => Err(AppSqliteError::DecodeEnum { field, value }),
}
diff --git a/crates/view/src/lib.rs b/crates/view/src/lib.rs
@@ -1076,11 +1076,11 @@ pub struct BuyerOrderReviewProjection {
pub enum TradeAgreementStatus {
#[default]
Requested,
- RevisionProposed,
- AgreedPendingRhi,
+ AgreedPendingValidation,
Committed,
Declined,
Cancelled,
+ ValidationExpired,
Invalid,
}
@@ -1088,11 +1088,11 @@ impl TradeAgreementStatus {
pub const fn storage_key(self) -> &'static str {
match self {
Self::Requested => "requested",
- Self::RevisionProposed => "revision_proposed",
- Self::AgreedPendingRhi => "agreed_pending_rhi",
+ Self::AgreedPendingValidation => "agreed_pending_validation",
Self::Committed => "committed",
Self::Declined => "declined",
Self::Cancelled => "cancelled",
+ Self::ValidationExpired => "validation_expired",
Self::Invalid => "invalid",
}
}
@@ -1100,11 +1100,13 @@ impl TradeAgreementStatus {
pub const fn label_key_id(self) -> &'static str {
match self {
Self::Requested => "messages.trade.workflow.agreement.requested",
- Self::RevisionProposed => "messages.trade.workflow.agreement.revision_proposed",
- Self::AgreedPendingRhi => "messages.trade.workflow.agreement.agreed_pending_rhi",
+ Self::AgreedPendingValidation => {
+ "messages.trade.workflow.agreement.agreed_pending_validation"
+ }
Self::Committed => "messages.trade.workflow.agreement.committed",
Self::Declined => "messages.trade.workflow.agreement.declined",
Self::Cancelled => "messages.trade.workflow.agreement.cancelled",
+ Self::ValidationExpired => "messages.trade.workflow.agreement.validation_expired",
Self::Invalid => "messages.trade.workflow.agreement.invalid",
}
}
@@ -1113,11 +1115,11 @@ impl TradeAgreementStatus {
match status {
RadrootsTradeWorkflowState::Missing => Self::Invalid,
RadrootsTradeWorkflowState::Requested => Self::Requested,
- RadrootsTradeWorkflowState::RevisionProposed => Self::RevisionProposed,
- RadrootsTradeWorkflowState::AgreedPendingRhi => Self::AgreedPendingRhi,
+ RadrootsTradeWorkflowState::AgreedPendingValidation => Self::AgreedPendingValidation,
RadrootsTradeWorkflowState::Committed => Self::Committed,
RadrootsTradeWorkflowState::Declined => Self::Declined,
RadrootsTradeWorkflowState::Cancelled => Self::Cancelled,
+ RadrootsTradeWorkflowState::ValidationExpired => Self::ValidationExpired,
RadrootsTradeWorkflowState::Invalid => Self::Invalid,
}
}
@@ -1221,16 +1223,15 @@ impl TradeInventoryStatus {
pub fn from_active_order_projection(projection: &RadrootsOrderProjection) -> Self {
match projection.status {
- RadrootsTradeWorkflowState::Requested
- | RadrootsTradeWorkflowState::RevisionProposed => Self::NeedsReview,
- RadrootsTradeWorkflowState::AgreedPendingRhi
+ RadrootsTradeWorkflowState::Requested => Self::NeedsReview,
+ RadrootsTradeWorkflowState::AgreedPendingValidation
| RadrootsTradeWorkflowState::Committed => Self::Reserved,
RadrootsTradeWorkflowState::Declined | RadrootsTradeWorkflowState::Cancelled => {
Self::Available
}
- RadrootsTradeWorkflowState::Missing | RadrootsTradeWorkflowState::Invalid => {
- Self::NeedsReview
- }
+ RadrootsTradeWorkflowState::Missing
+ | RadrootsTradeWorkflowState::ValidationExpired
+ | RadrootsTradeWorkflowState::Invalid => Self::NeedsReview,
}
}
}
@@ -1585,8 +1586,8 @@ pub fn order_status_from_active_order_projection(
match projection.status {
RadrootsTradeWorkflowState::Missing => None,
RadrootsTradeWorkflowState::Requested
- | RadrootsTradeWorkflowState::RevisionProposed
- | RadrootsTradeWorkflowState::AgreedPendingRhi => Some(OrderStatus::NeedsAction),
+ | RadrootsTradeWorkflowState::AgreedPendingValidation
+ | RadrootsTradeWorkflowState::ValidationExpired => Some(OrderStatus::NeedsAction),
RadrootsTradeWorkflowState::Committed => Some(OrderStatus::Scheduled),
RadrootsTradeWorkflowState::Declined | RadrootsTradeWorkflowState::Cancelled => {
Some(OrderStatus::Declined)
@@ -2889,21 +2890,21 @@ mod tests {
);
assert_eq!(
TradeAgreementStatus::from_active_order_status(
- &RadrootsTradeWorkflowState::RevisionProposed
- ),
- TradeAgreementStatus::RevisionProposed
- );
- assert_eq!(
- TradeAgreementStatus::from_active_order_status(
- &RadrootsTradeWorkflowState::AgreedPendingRhi
+ &RadrootsTradeWorkflowState::AgreedPendingValidation
),
- TradeAgreementStatus::AgreedPendingRhi
+ TradeAgreementStatus::AgreedPendingValidation
);
assert_eq!(
TradeAgreementStatus::from_active_order_status(&RadrootsTradeWorkflowState::Committed),
TradeAgreementStatus::Committed
);
assert_eq!(
+ TradeAgreementStatus::from_active_order_status(
+ &RadrootsTradeWorkflowState::ValidationExpired
+ ),
+ TradeAgreementStatus::ValidationExpired
+ );
+ assert_eq!(
TradeAgreementStatus::from_active_order_status(&RadrootsTradeWorkflowState::Invalid),
TradeAgreementStatus::Invalid
);
@@ -2960,24 +2961,24 @@ mod tests {
Some(OrderStatus::Scheduled)
);
- let pending_rhi_order =
- test_active_order_projection(RadrootsTradeWorkflowState::AgreedPendingRhi);
- let pending_rhi_projection = TradeWorkflowProjection::from_active_order_projection(
+ let pending_validation_order =
+ test_active_order_projection(RadrootsTradeWorkflowState::AgreedPendingValidation);
+ let pending_validation_projection = TradeWorkflowProjection::from_active_order_projection(
order_id,
- &pending_rhi_order,
+ &pending_validation_order,
TradeRevisionStatus::None,
TradeProvenanceProjection::from_primary_source(TradeWorkflowSource::RuntimeStore),
);
assert_eq!(
- pending_rhi_projection.agreement,
- TradeAgreementStatus::AgreedPendingRhi
+ pending_validation_projection.agreement,
+ TradeAgreementStatus::AgreedPendingValidation
);
assert_eq!(
- pending_rhi_projection.inventory,
+ pending_validation_projection.inventory,
TradeInventoryStatus::Reserved
);
assert_eq!(
- order_status_from_active_order_projection(&pending_rhi_order),
+ order_status_from_active_order_projection(&pending_validation_order),
Some(OrderStatus::NeedsAction)
);
@@ -3060,14 +3061,14 @@ mod tests {
);
assert_eq!(TradeAgreementStatus::Requested.storage_key(), "requested");
assert_eq!(
- TradeAgreementStatus::RevisionProposed.storage_key(),
- "revision_proposed"
+ TradeAgreementStatus::AgreedPendingValidation.storage_key(),
+ "agreed_pending_validation"
);
+ assert_eq!(TradeAgreementStatus::Committed.storage_key(), "committed");
assert_eq!(
- TradeAgreementStatus::AgreedPendingRhi.storage_key(),
- "agreed_pending_rhi"
+ TradeAgreementStatus::ValidationExpired.storage_key(),
+ "validation_expired"
);
- assert_eq!(TradeAgreementStatus::Committed.storage_key(), "committed");
assert_eq!(TradeAgreementStatus::Invalid.storage_key(), "invalid");
assert_eq!(
TradeRevisionStatus::KeptAsPlaced.storage_key(),
@@ -3084,12 +3085,12 @@ mod tests {
"messages.trade.workflow.agreement.requested"
);
assert_eq!(
- TradeAgreementStatus::RevisionProposed.label_key_id(),
- "messages.trade.workflow.agreement.revision_proposed"
+ TradeAgreementStatus::AgreedPendingValidation.label_key_id(),
+ "messages.trade.workflow.agreement.agreed_pending_validation"
);
assert_eq!(
- TradeAgreementStatus::AgreedPendingRhi.label_key_id(),
- "messages.trade.workflow.agreement.agreed_pending_rhi"
+ TradeAgreementStatus::ValidationExpired.label_key_id(),
+ "messages.trade.workflow.agreement.validation_expired"
);
assert_eq!(
TradeAgreementStatus::Invalid.label_key_id(),
diff --git a/i18n/locales/en/messages.json b/i18n/locales/en/messages.json
@@ -413,11 +413,11 @@
"trade.workflow.axis.inventory": "Stock",
"trade.workflow.axis.source": "Source",
"trade.workflow.agreement.requested": "Requested",
- "trade.workflow.agreement.revision_proposed": "Revision proposed",
- "trade.workflow.agreement.agreed_pending_rhi": "Pending validation",
+ "trade.workflow.agreement.agreed_pending_validation": "Pending validation",
"trade.workflow.agreement.committed": "Committed",
"trade.workflow.agreement.declined": "Declined",
"trade.workflow.agreement.cancelled": "Cancelled",
+ "trade.workflow.agreement.validation_expired": "Validation expired",
"trade.workflow.agreement.invalid": "Invalid",
"trade.workflow.revision.none": "No change",
"trade.workflow.revision.change_proposed": "Change proposed",