diff --git a/tests/contract_test.rs b/tests/contract_test.rs index 988ecf0..88013b6 100644 --- a/tests/contract_test.rs +++ b/tests/contract_test.rs @@ -2746,3 +2746,74 @@ fn remove_asset_emits_asset_removed_event() { (Event::AssetRemoved(asset), ledger), ); } + +// --------------------------------------------------------------------------- +// Issue #135 — StatusUpdated event emitted on status transitions +// --------------------------------------------------------------------------- + +#[test] +fn test_mark_processing_emits_status_updated() { + let env = Env::default(); + let (admin, contract_id, client) = setup(&env); + let relayer = Address::generate(&env); + client.grant_relayer(&admin, &relayer); + client.add_asset(&admin, &usd(&env)); + + let tx_id = client.register_deposit( + &relayer, + &SorobanString::from_str(&env, "su-mark-processing"), + &Address::generate(&env), + &50_000_000, + &usd(&env), + &None, + &None, + &None, + ); + client.mark_processing(&relayer, &tx_id); + + let topics: soroban_sdk::Vec = (symbol_short!("synapse"),).into_val(&env); + let found = env.events().all().iter().any(|(contract, evt_topics, raw)| { + contract == contract_id + && evt_topics == topics + && matches!( + <(Event, u32)>::try_from_val(&env, &raw), + Ok((Event::StatusUpdated(ref id, ref s), _)) + if id == &tx_id && s == &synapse_contract::types::TransactionStatus::Processing + ) + }); + assert!(found, "Expected StatusUpdated(tx_id, Processing) event"); +} + +#[test] +fn test_mark_completed_emits_status_updated() { + let env = Env::default(); + let (admin, contract_id, client) = setup(&env); + let relayer = Address::generate(&env); + client.grant_relayer(&admin, &relayer); + client.add_asset(&admin, &usd(&env)); + + let tx_id = client.register_deposit( + &relayer, + &SorobanString::from_str(&env, "su-mark-completed"), + &Address::generate(&env), + &50_000_000, + &usd(&env), + &None, + &None, + &None, + ); + client.mark_processing(&relayer, &tx_id); + client.mark_completed(&relayer, &tx_id); + + let topics: soroban_sdk::Vec = (symbol_short!("synapse"),).into_val(&env); + let found = env.events().all().iter().any(|(contract, evt_topics, raw)| { + contract == contract_id + && evt_topics == topics + && matches!( + <(Event, u32)>::try_from_val(&env, &raw), + Ok((Event::StatusUpdated(ref id, ref s), _)) + if id == &tx_id && s == &synapse_contract::types::TransactionStatus::Completed + ) + }); + assert!(found, "Expected StatusUpdated(tx_id, Completed) event"); +}