Skip to content
Open
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
90 changes: 80 additions & 10 deletions tests/contract_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -966,6 +966,7 @@ fn mark_processing_on_non_pending_tx_panics() {
&usd(&env),
&None,
&None,
&None,
);
client.mark_processing(&relayer, &tx_id);
client.mark_completed(&relayer, &tx_id);
Expand Down Expand Up @@ -1205,18 +1206,11 @@ fn finalize_settlement_stores_record() {
#[test]
fn finalize_settlement_emits_settlement_finalized_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);
client.add_asset(&admin, &usd(&env));

let tx_id_1 = client.register_deposit(&relayer, &SorobanString::from_str(&env, "a4"),
&Address::generate(&env), &40_000_000, &usd(&env), &None, &None);
client.mark_processing(&relayer, &tx_id_1);
client.mark_completed(&relayer, &tx_id_1);

let tx_id_2 = client.register_deposit(&relayer, &SorobanString::from_str(&env, "a5"),
&Address::generate(&env), &60_000_000, &usd(&env), &None, &None);
let tx_id_1 = client.register_deposit(
&relayer,
&SorobanString::from_str(&env, "a4"),
Expand All @@ -1225,6 +1219,7 @@ fn finalize_settlement_emits_settlement_finalized_event() {
&usd(&env),
&None,
&None,
&None,
);
client.mark_processing(&relayer, &tx_id_1);
client.mark_completed(&relayer, &tx_id_1);
Expand All @@ -1237,14 +1232,15 @@ fn finalize_settlement_emits_settlement_finalized_event() {
&usd(&env),
&None,
&None,
&None,
);
client.mark_processing(&relayer, &tx_id_2);
client.mark_completed(&relayer, &tx_id_2);

let _settlement_id = client.finalize_settlement(
let settlement_id = client.finalize_settlement(
&relayer,
&usd(&env),
&vec![&env, tx_id_1, tx_id_2],
&vec![&env, tx_id_1.clone(), tx_id_2.clone()],
&100_000_000,
&0u64,
&1u64,
Expand All @@ -1253,6 +1249,7 @@ fn finalize_settlement_emits_settlement_finalized_event() {
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 (event_contract_1, event_topics_1, event_data_1) = all_events.get(event_count - 3).unwrap();
let (event_contract_2, event_topics_2, event_data_2) = all_events.get(event_count - 2).unwrap();
Expand Down Expand Up @@ -1280,6 +1277,79 @@ fn finalize_settlement_emits_settlement_finalized_event() {
);
}

#[test]
#[should_panic(expected = "total_amount mismatch")]
fn test_finalize_settlement_panics_on_total_mismatch() {
let env = Env::default();
let (admin, _, 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, "mismatch-total-1"),
&Address::generate(&env),
&100_000_000,
&usd(&env),
&None,
&None,
&None,
);
client.mark_processing(&relayer, &tx_id);
client.mark_completed(&relayer, &tx_id);

client.finalize_settlement(
&relayer,
&usd(&env),
&vec![&env, tx_id],
&999_999_999,
&0u64,
Comment on lines +1280 to +1307
Copy link

Copilot AI Mar 30, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

#[should_panic(expected = "total_amount mismatch")] will fail because finalize_settlement currently doesn’t validate total_amount against the sum of the referenced transactions (no such panic is emitted in src/lib.rs). Either add the total-sum validation to the contract implementation, or change/remove this test to match the current behavior.

Copilot uses AI. Check for mistakes.
&1u64,
);
}

#[test]
#[should_panic(expected = "transaction already settled")]
fn test_finalize_settlement_panics_on_double_settle() {
let env = Env::default();
let (admin, _, client) = setup(&env);
Comment on lines +1280 to +1316
Copy link

Copilot AI Mar 30, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New tests here are the only ones in this file using the test_ prefix (most others are named descriptively without it). Rename them to match the existing naming pattern for consistency (e.g., finalize_settlement_panics_on_total_mismatch / finalize_settlement_panics_on_double_settle).

Copilot uses AI. Check for mistakes.
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, "double-settle-1"),
&Address::generate(&env),
&50_000_000,
&usd(&env),
&None,
&None,
&None,
);
client.mark_processing(&relayer, &tx_id);
client.mark_completed(&relayer, &tx_id);

client.finalize_settlement(
&relayer,
&usd(&env),
&vec![&env, tx_id.clone()],
&50_000_000,
&0u64,
&1u64,
);

client.finalize_settlement(
&relayer,
&usd(&env),
&vec![&env, tx_id],
&50_000_000,
&0u64,
&1u64,
);
}

#[test]
Comment on lines +1280 to 1353
Copy link

Copilot AI Mar 30, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These newly added settlement panic tests duplicate existing coverage later in this same file (e.g. finalize_settlement_panics_when_total_amount_mismatch and settle_already_settled_tx_panics). Keeping both copies increases maintenance burden and can introduce contradictory expectations; consider removing the duplicates or consolidating into a single set of tests.

Suggested change
#[test]
#[should_panic(expected = "total_amount mismatch")]
fn test_finalize_settlement_panics_on_total_mismatch() {
let env = Env::default();
let (admin, _, 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, "mismatch-total-1"),
&Address::generate(&env),
&100_000_000,
&usd(&env),
&None,
&None,
&None,
);
client.mark_processing(&relayer, &tx_id);
client.mark_completed(&relayer, &tx_id);
client.finalize_settlement(
&relayer,
&usd(&env),
&vec![&env, tx_id],
&999_999_999,
&0u64,
&1u64,
);
}
#[test]
#[should_panic(expected = "transaction already settled")]
fn test_finalize_settlement_panics_on_double_settle() {
let env = Env::default();
let (admin, _, 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, "double-settle-1"),
&Address::generate(&env),
&50_000_000,
&usd(&env),
&None,
&None,
&None,
);
client.mark_processing(&relayer, &tx_id);
client.mark_completed(&relayer, &tx_id);
client.finalize_settlement(
&relayer,
&usd(&env),
&vec![&env, tx_id.clone()],
&50_000_000,
&0u64,
&1u64,
);
client.finalize_settlement(
&relayer,
&usd(&env),
&vec![&env, tx_id],
&50_000_000,
&0u64,
&1u64,
);
}
#[test]
#[test]

Copilot uses AI. Check for mistakes.
#[should_panic(expected = "transaction not completed")]
fn settle_non_completed_tx_panics() {
Expand Down
Loading