diff --git a/src/lib.rs b/src/lib.rs index e291e02..5ce9f8f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -58,7 +58,6 @@ impl SynapseContract { emit(&env, Event::Initialized(admin)); } - // TODO(#3): emit `RelayerGranted` event pub fn grant_relayer(env: Env, caller: Address, relayer: Address) { require_not_paused(&env); let zero_addr = Address::from_string(&SorobanString::from_str( @@ -70,6 +69,7 @@ impl SynapseContract { } require_admin(&env, &caller); relayers::add(&env, &relayer); + emit(&env, Event::RelayerGranted(relayer)); } pub fn revoke_relayer(env: Env, caller: Address, relayer: Address) { diff --git a/tests/contract_test.rs b/tests/contract_test.rs index 988ecf0..2098bb8 100644 --- a/tests/contract_test.rs +++ b/tests/contract_test.rs @@ -83,11 +83,23 @@ fn is_relayer_query_reflects_registration_state() { #[test] fn grant_relayer_emits_relayer_granted_event() { let env = Env::default(); - let (admin, _, client) = setup(&env); + let (admin, contract_id, client) = setup(&env); let relayer = Address::generate(&env); + client.grant_relayer(&admin, &relayer); - let events = env.events().all(); - assert!(!events.is_empty()); + + let all_events = env.events().all(); + let topics: soroban_sdk::Vec = (symbol_short!("synapse"),).into_val(&env); + let ledger = env.ledger().sequence(); + let event_count = all_events.len(); + let (evt_contract, evt_topics, evt_data) = all_events.get(event_count - 1).unwrap(); + + assert_eq!(evt_contract, contract_id); + assert_eq!(evt_topics, topics); + assert_eq!( + event_data(&env, evt_data), + (Event::RelayerGranted(relayer), ledger), + ); } #[test] @@ -2746,3 +2758,82 @@ fn remove_asset_emits_asset_removed_event() { (Event::AssetRemoved(asset), ledger), ); } + +// --------------------------------------------------------------------------- +// Issue #591 — revoke_relayer emits RelayerRevoked event +// --------------------------------------------------------------------------- + +#[test] +fn test_revoke_relayer_emits_event() { + let env = Env::default(); + let (admin, contract_id, client) = setup(&env); + let relayer = Address::generate(&env); + + client.grant_relayer(&admin, &relayer); + client.revoke_relayer(&admin, &relayer); + + let all_events = env.events().all(); + let topics: soroban_sdk::Vec = (symbol_short!("synapse"),).into_val(&env); + let ledger = env.ledger().sequence(); + let event_count = all_events.len(); + let (evt_contract, evt_topics, evt_data) = all_events.get(event_count - 1).unwrap(); + + assert_eq!(evt_contract, contract_id); + assert_eq!(evt_topics, topics); + assert_eq!( + event_data(&env, evt_data), + (Event::RelayerRevoked(relayer), ledger), + ); +} + +// --------------------------------------------------------------------------- +// Issue #592 — transfer_admin emits AdminTransferred event +// --------------------------------------------------------------------------- + +#[test] +fn test_transfer_admin_emits_event() { + let env = Env::default(); + let (admin, contract_id, client) = setup(&env); + let new_admin = Address::generate(&env); + + client.transfer_admin(&admin, &new_admin); + + let all_events = env.events().all(); + let topics: soroban_sdk::Vec = (symbol_short!("synapse"),).into_val(&env); + let ledger = env.ledger().sequence(); + let event_count = all_events.len(); + let (evt_contract, evt_topics, evt_data) = all_events.get(event_count - 1).unwrap(); + + assert_eq!(evt_contract, contract_id); + assert_eq!(evt_topics, topics); + assert_eq!( + event_data(&env, evt_data), + (Event::AdminTransferred(admin, new_admin.clone()), ledger), + ); + assert_eq!(client.get_admin(), new_admin); +} + +// --------------------------------------------------------------------------- +// Issue #593 — pause emits ContractPaused event +// --------------------------------------------------------------------------- + +#[test] +fn test_pause_emits_event() { + let env = Env::default(); + let (admin, contract_id, client) = setup(&env); + + client.pause(&admin); + + let all_events = env.events().all(); + let topics: soroban_sdk::Vec = (symbol_short!("synapse"),).into_val(&env); + let ledger = env.ledger().sequence(); + let event_count = all_events.len(); + let (evt_contract, evt_topics, evt_data) = all_events.get(event_count - 1).unwrap(); + + assert_eq!(evt_contract, contract_id); + assert_eq!(evt_topics, topics); + assert_eq!( + event_data(&env, evt_data), + (Event::ContractPaused(admin), ledger), + ); +}