From 3b37f287e85e6a63667e0d45bdc0336eb4fa83b5 Mon Sep 17 00:00:00 2001 From: Julianemeka Date: Mon, 1 Jun 2026 20:15:32 +0000 Subject: [PATCH] test: add finalise_twice, execute_twice, cancel_already_cancelled tests Closes #69 --- contracts/governance/src/test.rs | 41 ++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/contracts/governance/src/test.rs b/contracts/governance/src/test.rs index 9e0aa2f..4a5b69c 100644 --- a/contracts/governance/src/test.rs +++ b/contracts/governance/src/test.rs @@ -564,3 +564,44 @@ fn test_get_proposals_by_state() { assert_eq!(cancelled.len(), 1); assert_eq!(cancelled.get(0).unwrap().id, 1); } + +// --------------------------------------------------------------------------- +// Double-action guards (Issue #69) +// --------------------------------------------------------------------------- + +#[test] +fn test_finalise_twice_fails() { + let env = Env::default(); + let (gov, _, _, voter, _) = setup(&env); + let id = make_proposal(&gov, &env, &voter); + gov.cast_vote(&voter, &id, &Vote::Yes); + let proposal = gov.get_proposal(&id); + env.ledger().with_mut(|l| l.timestamp = proposal.end_time + 1); + gov.finalise(&id); + let result = gov.try_finalise(&id); + assert_eq!(result, Err(Ok(ContractError::ProposalNotActive))); +} + +#[test] +fn test_execute_twice_fails() { + let env = Env::default(); + let (gov, _, admin, voter, _) = setup(&env); + let id = make_proposal(&gov, &env, &voter); + gov.cast_vote(&voter, &id, &Vote::Yes); + let proposal = gov.get_proposal(&id); + env.ledger().with_mut(|l| l.timestamp = proposal.end_time + 1); + gov.finalise(&id); + gov.execute(&admin, &id); + let result = gov.try_execute(&admin, &id); + assert_eq!(result, Err(Ok(ContractError::ProposalNotPassed))); +} + +#[test] +fn test_cancel_already_cancelled_fails() { + let env = Env::default(); + let (gov, _, admin, voter, _) = setup(&env); + let id = make_proposal(&gov, &env, &voter); + gov.cancel(&admin, &id); + let result = gov.try_cancel(&admin, &id); + assert_eq!(result, Err(Ok(ContractError::ProposalNotActive))); +}