Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -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) {
Expand Down
97 changes: 94 additions & 3 deletions tests/contract_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<Val> = (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]
Expand Down Expand Up @@ -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<Val> = (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<Val> = (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<Val> = (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),
);
}