From e813c838e814ed396c9e2b5ca70104ffe15e2bb0 Mon Sep 17 00:00:00 2001 From: immrsd Date: Fri, 21 Nov 2025 15:51:52 +0300 Subject: [PATCH 1/5] Add doc requirement clarifying that voting starts only after snapshot --- packages/governance/src/governor/governor.cairo | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/governance/src/governor/governor.cairo b/packages/governance/src/governor/governor.cairo index b1ed21eff..3fbbda05d 100644 --- a/packages/governance/src/governor/governor.cairo +++ b/packages/governance/src/governor/governor.cairo @@ -562,6 +562,7 @@ pub mod GovernorComponent { /// Requirements: /// /// - The proposal must be active. + /// - The current timepoint must be greater than the proposal's snapshot timepoint. /// /// Emits a `VoteCast` event. fn cast_vote( @@ -576,6 +577,7 @@ pub mod GovernorComponent { /// Requirements: /// /// - The proposal must be active. + /// - The current timepoint must be greater than the proposal's snapshot timepoint. /// /// Emits a `VoteCast` event. fn cast_vote_with_reason( @@ -593,6 +595,7 @@ pub mod GovernorComponent { /// Requirements: /// /// - The proposal must be active. + /// - The current timepoint must be greater than the proposal's snapshot timepoint. /// /// Emits either: /// - `VoteCast` event if no params are provided. @@ -613,6 +616,7 @@ pub mod GovernorComponent { /// Requirements: /// /// - The proposal must be active. + /// - The current timepoint must be greater than the proposal's snapshot timepoint. /// - The nonce in the signed message must match the account's current nonce. /// - `voter` must implement `SRC6::is_valid_signature`. /// - `signature` should be valid for the message hash. @@ -645,6 +649,7 @@ pub mod GovernorComponent { /// Requirements: /// /// - The proposal must be active. + /// - The current timepoint must be greater than the proposal's snapshot timepoint. /// - The nonce in the signed message must match the account's current nonce. /// - `voter` must implement `SRC6::is_valid_signature`. /// - `signature` should be valid for the message hash. From 1c38e3a43a5d6c414bfd4a5f879f0cb6eb27ef59 Mon Sep 17 00:00:00 2001 From: immrsd Date: Fri, 21 Nov 2025 15:53:02 +0300 Subject: [PATCH 2/5] Mint initial supply at deployment for Votes mocks --- packages/test_common/src/mocks/votes.cairo | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/test_common/src/mocks/votes.cairo b/packages/test_common/src/mocks/votes.cairo index 5abf19ca7..104d3179a 100644 --- a/packages/test_common/src/mocks/votes.cairo +++ b/packages/test_common/src/mocks/votes.cairo @@ -128,8 +128,9 @@ pub mod ERC20TimestampVotesMock { } #[constructor] - fn constructor(ref self: ContractState) { + fn constructor(ref self: ContractState, total_supply: u256) { self.erc20.initializer("MyToken", "MTK"); + self.erc20.mint(starknet::get_caller_address(), total_supply); } } @@ -179,8 +180,9 @@ pub mod ERC20BlockNumberVotesMock { } #[constructor] - fn constructor(ref self: ContractState) { + fn constructor(ref self: ContractState, total_supply: u256) { self.erc20.initializer("MyToken", "MTK"); + self.erc20.mint(starknet::get_caller_address(), total_supply); } } From bd09632f5d054e39ae75ac5ef789ad99015c8e48 Mon Sep 17 00:00:00 2001 From: immrsd Date: Fri, 21 Nov 2025 15:54:28 +0300 Subject: [PATCH 3/5] Add additional test cases for block-number-based governor voting --- .../tests/governor/block_number/common.cairo | 17 +++-- .../governor/block_number/test_governor.cairo | 68 ++++++++++++++++++- 2 files changed, 78 insertions(+), 7 deletions(-) diff --git a/packages/governance/src/tests/governor/block_number/common.cairo b/packages/governance/src/tests/governor/block_number/common.cairo index 277b38ecf..7a41ec9c4 100644 --- a/packages/governance/src/tests/governor/block_number/common.cairo +++ b/packages/governance/src/tests/governor/block_number/common.cairo @@ -5,8 +5,9 @@ use openzeppelin_interfaces::governor::{IGovernor, ProposalState}; use openzeppelin_test_common::mocks::governor::GovernorMock::SNIP12MetadataImpl; use openzeppelin_test_common::mocks::governor::{GovernorMock, GovernorTimelockedMock}; use openzeppelin_testing as utils; -use openzeppelin_testing::constants::{ADMIN, OTHER, VOTES_TOKEN}; +use openzeppelin_testing::constants::{ADMIN, OTHER, VOTES_TOKEN, SUPPLY}; use openzeppelin_utils::bytearray::ByteArrayExtTrait; +use openzeppelin_utils::serde::SerializedAppend; use snforge_std::{start_cheat_block_number_global, start_mock_call}; use starknet::ContractAddress; use starknet::account::Call; @@ -45,10 +46,16 @@ pub fn hash_proposal(calls: Span, description_hash: felt252) -> felt252 { pub fn get_proposal_info() -> (felt252, ProposalCore) { let calls = get_calls(OTHER, false); - get_proposal_with_id(calls, @"proposal description") + build_proposal_with_id(calls, @"proposal description") } -pub fn get_proposal_with_id(calls: Span, description: @ByteArray) -> (felt252, ProposalCore) { +pub fn get_proposal_info_with_custom_delay(delay: u64) -> (felt252, ProposalCore) { + let (id, mut proposal) = get_proposal_info(); + proposal.vote_start = starknet::get_block_number() + delay; + (id, proposal) +} + +fn build_proposal_with_id(calls: Span, description: @ByteArray) -> (felt252, ProposalCore) { let block_number = starknet::get_block_number(); let vote_start = block_number + GovernorMock::VOTING_DELAY; let vote_duration = GovernorMock::VOTING_PERIOD; @@ -105,7 +112,9 @@ pub fn set_executor( } pub fn deploy_votes_token() -> IERC20Dispatcher { - utils::declare_and_deploy_at("ERC20BlockNumberVotesMock", VOTES_TOKEN, array![]); + let mut calldata = array![]; + calldata.append_serde(SUPPLY); + utils::declare_and_deploy_at("ERC20BlockNumberVotesMock", VOTES_TOKEN, calldata); IERC20Dispatcher { contract_address: VOTES_TOKEN } } diff --git a/packages/governance/src/tests/governor/block_number/test_governor.cairo b/packages/governance/src/tests/governor/block_number/test_governor.cairo index 81a822bc5..c92e3f655 100644 --- a/packages/governance/src/tests/governor/block_number/test_governor.cairo +++ b/packages/governance/src/tests/governor/block_number/test_governor.cairo @@ -9,7 +9,7 @@ use openzeppelin_test_common::mocks::timelock::{ IMockContractDispatcher, IMockContractDispatcherTrait, }; use openzeppelin_testing as utils; -use openzeppelin_testing::constants::{ADMIN, OTHER, VOTES_TOKEN, ZERO}; +use openzeppelin_testing::constants::{ADMIN, OTHER, VOTES_TOKEN, ZERO, SUPPLY, BLOCK_NUMBER}; use openzeppelin_testing::{AsAddressTrait, spy_events}; use openzeppelin_utils::bytearray::ByteArrayExtTrait; use openzeppelin_utils::cryptography::snip12::OffchainMessageHash; @@ -21,13 +21,14 @@ use snforge_std::{ use starknet::ContractAddress; use starknet::account::Call; use starknet::storage::{StorageMapWriteAccess, StoragePathEntry, StoragePointerWriteAccess}; +use openzeppelin_interfaces::governance::votes::{IVotesDispatcher, IVotesDispatcherTrait}; use crate::governor::GovernorComponent::{InternalExtendedImpl, InternalImpl}; use crate::governor::extensions::GovernorVotesComponent::InternalTrait; use crate::governor::vote::{Vote, VoteWithReasonAndParams}; use crate::governor::{DefaultConfig, ProposalCore}; use crate::tests::governor::block_number::common::{ COMPONENT_STATE, CONTRACT_STATE, deploy_votes_token, get_calls, get_mock_state, - get_proposal_info, get_state, hash_proposal, setup_active_proposal, setup_canceled_proposal, + get_proposal_info, get_proposal_info_with_custom_delay, get_state, hash_proposal, setup_active_proposal, setup_canceled_proposal, setup_defeated_proposal, setup_executed_proposal, setup_pending_proposal, setup_queued_proposal, setup_succeeded_proposal, }; @@ -436,10 +437,10 @@ fn test_has_voted() { fn test_propose_external_version(external_state_version: bool) { let mut state = COMPONENT_STATE(); - let mut spy = spy_events(); let contract_address = test_address(); deploy_votes_token(); initialize_votes_component(VOTES_TOKEN); + let mut spy = spy_events(); let calls = get_calls(OTHER, false); let proposer = ADMIN; @@ -2031,6 +2032,19 @@ fn test__cast_vote_pending() { state._cast_vote(id, OTHER, 0, "", params); } +#[test] +#[should_panic(expected: 'Votes: future Lookup')] +fn test__cast_vote_at_vote_start() { + let mut state = COMPONENT_STATE(); + deploy_votes_token(); + initialize_votes_component(VOTES_TOKEN); + let (id, proposal) = setup_pending_proposal(ref state, false); + + start_cheat_block_number_global(proposal.vote_start); + let params = array![].span(); + state._cast_vote(id, OTHER, 0, "", params); +} + #[test] fn test__cast_vote_active_no_params() { let mut state = COMPONENT_STATE(); @@ -2078,6 +2092,49 @@ fn test__cast_vote_active_with_params() { ); } +#[test] +#[should_panic(expected: 'Votes: future Lookup')] +fn test__cast_vote_zero_delay() { + start_cheat_block_number_global(BLOCK_NUMBER - 1); + let voter = test_address(); + let mut state = COMPONENT_STATE(); + deploy_votes_token(); + delegate_votes_to(voter); + initialize_votes_component(VOTES_TOKEN); + + // Setup proposal with 0 delay + start_cheat_block_number_global(BLOCK_NUMBER); + let (id, proposal) = get_proposal_info_with_custom_delay(0); + state.Governor_proposals.write(id, proposal); + + // Try to cast vote + let reason = "reason"; + let params = array![].span(); + state._cast_vote(id, OTHER, 0, reason, params); +} + +#[test] +fn test__cast_vote_zero_delay_in_next_block() { + start_cheat_block_number_global(BLOCK_NUMBER - 1); + let voter = test_address(); + let mut state = COMPONENT_STATE(); + deploy_votes_token(); + delegate_votes_to(voter); + initialize_votes_component(VOTES_TOKEN); + + // Setup proposal with 0 delay + start_cheat_block_number_global(BLOCK_NUMBER); + let (id, proposal) = get_proposal_info_with_custom_delay(0); + state.Governor_proposals.write(id, proposal); + + // Cast vote + start_cheat_block_number_global(BLOCK_NUMBER + 1); + let reason = "reason"; + let params = array![].span(); + let weight = state._cast_vote(id, voter, 0, reason, params); + assert_eq!(weight, SUPPLY); +} + #[test] #[should_panic(expected: 'Unexpected proposal state')] fn test__cast_vote_defeated() { @@ -2146,3 +2203,8 @@ fn initialize_votes_component(votes_token: ContractAddress) { let mut mock_state = CONTRACT_STATE(); mock_state.governor_votes.initializer(votes_token); } + +fn delegate_votes_to(delegatee: ContractAddress) { + let votes_dispatcher = IVotesDispatcher { contract_address: VOTES_TOKEN }; + votes_dispatcher.delegate(delegatee); +} From 3e0f2f53ca56e4f5624120862559cc17ff5f3083 Mon Sep 17 00:00:00 2001 From: immrsd Date: Fri, 21 Nov 2025 15:54:56 +0300 Subject: [PATCH 4/5] Add additional test cases for timestamp-based governor voting --- .../src/tests/governor/timestamp/common.cairo | 13 +++- .../governor/timestamp/test_governor.cairo | 68 ++++++++++++++++++- 2 files changed, 76 insertions(+), 5 deletions(-) diff --git a/packages/governance/src/tests/governor/timestamp/common.cairo b/packages/governance/src/tests/governor/timestamp/common.cairo index a71eafeb8..799fd9644 100644 --- a/packages/governance/src/tests/governor/timestamp/common.cairo +++ b/packages/governance/src/tests/governor/timestamp/common.cairo @@ -5,8 +5,9 @@ use openzeppelin_interfaces::governor::{IGovernor, ProposalState}; use openzeppelin_test_common::mocks::governor::GovernorMock::SNIP12MetadataImpl; use openzeppelin_test_common::mocks::governor::{GovernorMock, GovernorTimelockedMock}; use openzeppelin_testing as utils; -use openzeppelin_testing::constants::{ADMIN, OTHER, VOTES_TOKEN}; +use openzeppelin_testing::constants::{ADMIN, OTHER, VOTES_TOKEN, SUPPLY}; use openzeppelin_utils::bytearray::ByteArrayExtTrait; +use openzeppelin_utils::serde::SerializedAppend; use snforge_std::{start_cheat_block_timestamp_global, start_mock_call}; use starknet::ContractAddress; use starknet::account::Call; @@ -48,6 +49,12 @@ pub fn get_proposal_info() -> (felt252, ProposalCore) { get_proposal_with_id(calls, @"proposal description") } +pub fn get_proposal_info_with_custom_delay(delay: u64) -> (felt252, ProposalCore) { + let (id, mut proposal) = get_proposal_info(); + proposal.vote_start = starknet::get_block_timestamp() + delay; + (id, proposal) +} + pub fn get_proposal_with_id(calls: Span, description: @ByteArray) -> (felt252, ProposalCore) { let timestamp = starknet::get_block_timestamp(); let vote_start = timestamp + GovernorMock::VOTING_DELAY; @@ -105,7 +112,9 @@ pub fn set_executor( } pub fn deploy_votes_token() -> IERC20Dispatcher { - utils::declare_and_deploy_at("ERC20TimestampVotesMock", VOTES_TOKEN, array![]); + let mut calldata = array![]; + calldata.append_serde(SUPPLY); + utils::declare_and_deploy_at("ERC20TimestampVotesMock", VOTES_TOKEN, calldata); IERC20Dispatcher { contract_address: VOTES_TOKEN } } diff --git a/packages/governance/src/tests/governor/timestamp/test_governor.cairo b/packages/governance/src/tests/governor/timestamp/test_governor.cairo index 21ded3c38..71d6053e9 100644 --- a/packages/governance/src/tests/governor/timestamp/test_governor.cairo +++ b/packages/governance/src/tests/governor/timestamp/test_governor.cairo @@ -9,10 +9,11 @@ use openzeppelin_test_common::mocks::timelock::{ IMockContractDispatcher, IMockContractDispatcherTrait, }; use openzeppelin_testing as utils; -use openzeppelin_testing::constants::{ADMIN, OTHER, VOTES_TOKEN, ZERO}; +use openzeppelin_testing::constants::{ADMIN, OTHER, VOTES_TOKEN, ZERO, SUPPLY, TIMESTAMP}; use openzeppelin_testing::{AsAddressTrait, spy_events}; use openzeppelin_utils::bytearray::ByteArrayExtTrait; use openzeppelin_utils::cryptography::snip12::OffchainMessageHash; +use openzeppelin_interfaces::governance::votes::{IVotesDispatcher, IVotesDispatcherTrait}; use snforge_std::signature::stark_curve::{StarkCurveKeyPairImpl, StarkCurveSignerImpl}; use snforge_std::{ start_cheat_block_timestamp_global, start_cheat_caller_address, start_cheat_chain_id_global, @@ -28,7 +29,7 @@ use crate::governor::{DefaultConfig, ProposalCore}; use crate::tests::governor::common::GovernorSpyHelpersImpl; use crate::tests::governor::timestamp::common::{ COMPONENT_STATE, CONTRACT_STATE, deploy_votes_token, get_calls, get_mock_state, - get_proposal_info, get_state, hash_proposal, setup_active_proposal, setup_canceled_proposal, + get_proposal_info, get_proposal_info_with_custom_delay, get_state, hash_proposal, setup_active_proposal, setup_canceled_proposal, setup_defeated_proposal, setup_executed_proposal, setup_pending_proposal, setup_queued_proposal, setup_succeeded_proposal, }; @@ -436,10 +437,10 @@ fn test_has_voted() { fn test_propose_external_version(external_state_version: bool) { let mut state = COMPONENT_STATE(); - let mut spy = spy_events(); let contract_address = test_address(); deploy_votes_token(); initialize_votes_component(VOTES_TOKEN); + let mut spy = spy_events(); let calls = get_calls(OTHER, false); let proposer = ADMIN; @@ -931,6 +932,19 @@ fn test_cast_vote_pending() { state.cast_vote(id, 0); } +#[test] +#[should_panic(expected: 'Votes: future Lookup')] +fn test__cast_vote_at_vote_start() { + let mut state = COMPONENT_STATE(); + deploy_votes_token(); + initialize_votes_component(VOTES_TOKEN); + let (id, proposal) = setup_pending_proposal(ref state, false); + + start_cheat_block_timestamp_global(proposal.vote_start); + let params = array![].span(); + state._cast_vote(id, OTHER, 0, "", params); +} + #[test] fn test_cast_vote_active() { let mut state = COMPONENT_STATE(); @@ -952,6 +966,49 @@ fn test_cast_vote_active() { spy.assert_only_event_vote_cast(contract_address, OTHER, id, 0, expected_weight, @""); } +#[test] +#[should_panic(expected: 'Votes: future Lookup')] +fn test__cast_vote_zero_delay() { + start_cheat_block_timestamp_global(TIMESTAMP - 1); + let voter = test_address(); + let mut state = COMPONENT_STATE(); + deploy_votes_token(); + delegate_votes_to(voter); + initialize_votes_component(VOTES_TOKEN); + + // Setup proposal with 0 delay + start_cheat_block_timestamp_global(TIMESTAMP); + let (id, proposal) = get_proposal_info_with_custom_delay(0); + state.Governor_proposals.write(id, proposal); + + // Try to cast vote + let reason = "reason"; + let params = array![].span(); + state._cast_vote(id, voter, 0, reason, params); +} + +#[test] +fn test__cast_vote_zero_delay_after_some_time() { + start_cheat_block_timestamp_global(TIMESTAMP - 1); + let voter = test_address(); + let mut state = COMPONENT_STATE(); + deploy_votes_token(); + delegate_votes_to(voter); + initialize_votes_component(VOTES_TOKEN); + + // Setup proposal with 0 delay + start_cheat_block_timestamp_global(TIMESTAMP); + let (id, proposal) = get_proposal_info_with_custom_delay(0); + state.Governor_proposals.write(id, proposal); + + // Cast vote + start_cheat_block_timestamp_global(TIMESTAMP + 1); + let reason = "reason"; + let params = array![].span(); + let weight = state._cast_vote(id, voter, 0, reason, params); + assert_eq!(weight, SUPPLY); +} + #[test] #[should_panic(expected: 'Unexpected proposal state')] fn test_cast_vote_defeated() { @@ -2146,3 +2203,8 @@ fn initialize_votes_component(votes_token: ContractAddress) { let mut mock_state = CONTRACT_STATE(); mock_state.governor_votes.initializer(votes_token); } + +fn delegate_votes_to(delegatee: ContractAddress) { + let votes_dispatcher = IVotesDispatcher { contract_address: VOTES_TOKEN }; + votes_dispatcher.delegate(delegatee); +} From 38ae3d8afa7e1d764a927ca3f6bda32e2c3afa3e Mon Sep 17 00:00:00 2001 From: immrsd Date: Fri, 21 Nov 2025 15:55:16 +0300 Subject: [PATCH 5/5] Format files --- .../src/tests/governor/block_number/common.cairo | 2 +- .../tests/governor/block_number/test_governor.cairo | 13 +++++++------ .../src/tests/governor/timestamp/common.cairo | 2 +- .../tests/governor/timestamp/test_governor.cairo | 13 +++++++------ 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/packages/governance/src/tests/governor/block_number/common.cairo b/packages/governance/src/tests/governor/block_number/common.cairo index 7a41ec9c4..6fccda9ee 100644 --- a/packages/governance/src/tests/governor/block_number/common.cairo +++ b/packages/governance/src/tests/governor/block_number/common.cairo @@ -5,7 +5,7 @@ use openzeppelin_interfaces::governor::{IGovernor, ProposalState}; use openzeppelin_test_common::mocks::governor::GovernorMock::SNIP12MetadataImpl; use openzeppelin_test_common::mocks::governor::{GovernorMock, GovernorTimelockedMock}; use openzeppelin_testing as utils; -use openzeppelin_testing::constants::{ADMIN, OTHER, VOTES_TOKEN, SUPPLY}; +use openzeppelin_testing::constants::{ADMIN, OTHER, SUPPLY, VOTES_TOKEN}; use openzeppelin_utils::bytearray::ByteArrayExtTrait; use openzeppelin_utils::serde::SerializedAppend; use snforge_std::{start_cheat_block_number_global, start_mock_call}; diff --git a/packages/governance/src/tests/governor/block_number/test_governor.cairo b/packages/governance/src/tests/governor/block_number/test_governor.cairo index c92e3f655..f26c7875c 100644 --- a/packages/governance/src/tests/governor/block_number/test_governor.cairo +++ b/packages/governance/src/tests/governor/block_number/test_governor.cairo @@ -1,4 +1,5 @@ use core::num::traits::Bounded; +use openzeppelin_interfaces::governance::votes::{IVotesDispatcher, IVotesDispatcherTrait}; use openzeppelin_interfaces::governor::{ IGOVERNOR_ID, IGovernor, IGovernorDispatcher, IGovernorDispatcherTrait, ProposalState, }; @@ -9,7 +10,7 @@ use openzeppelin_test_common::mocks::timelock::{ IMockContractDispatcher, IMockContractDispatcherTrait, }; use openzeppelin_testing as utils; -use openzeppelin_testing::constants::{ADMIN, OTHER, VOTES_TOKEN, ZERO, SUPPLY, BLOCK_NUMBER}; +use openzeppelin_testing::constants::{ADMIN, BLOCK_NUMBER, OTHER, SUPPLY, VOTES_TOKEN, ZERO}; use openzeppelin_testing::{AsAddressTrait, spy_events}; use openzeppelin_utils::bytearray::ByteArrayExtTrait; use openzeppelin_utils::cryptography::snip12::OffchainMessageHash; @@ -21,15 +22,15 @@ use snforge_std::{ use starknet::ContractAddress; use starknet::account::Call; use starknet::storage::{StorageMapWriteAccess, StoragePathEntry, StoragePointerWriteAccess}; -use openzeppelin_interfaces::governance::votes::{IVotesDispatcher, IVotesDispatcherTrait}; use crate::governor::GovernorComponent::{InternalExtendedImpl, InternalImpl}; use crate::governor::extensions::GovernorVotesComponent::InternalTrait; use crate::governor::vote::{Vote, VoteWithReasonAndParams}; use crate::governor::{DefaultConfig, ProposalCore}; use crate::tests::governor::block_number::common::{ COMPONENT_STATE, CONTRACT_STATE, deploy_votes_token, get_calls, get_mock_state, - get_proposal_info, get_proposal_info_with_custom_delay, get_state, hash_proposal, setup_active_proposal, setup_canceled_proposal, - setup_defeated_proposal, setup_executed_proposal, setup_pending_proposal, setup_queued_proposal, + get_proposal_info, get_proposal_info_with_custom_delay, get_state, hash_proposal, + setup_active_proposal, setup_canceled_proposal, setup_defeated_proposal, + setup_executed_proposal, setup_pending_proposal, setup_queued_proposal, setup_succeeded_proposal, }; use crate::tests::governor::common::GovernorSpyHelpersImpl; @@ -2101,7 +2102,7 @@ fn test__cast_vote_zero_delay() { deploy_votes_token(); delegate_votes_to(voter); initialize_votes_component(VOTES_TOKEN); - + // Setup proposal with 0 delay start_cheat_block_number_global(BLOCK_NUMBER); let (id, proposal) = get_proposal_info_with_custom_delay(0); @@ -2121,7 +2122,7 @@ fn test__cast_vote_zero_delay_in_next_block() { deploy_votes_token(); delegate_votes_to(voter); initialize_votes_component(VOTES_TOKEN); - + // Setup proposal with 0 delay start_cheat_block_number_global(BLOCK_NUMBER); let (id, proposal) = get_proposal_info_with_custom_delay(0); diff --git a/packages/governance/src/tests/governor/timestamp/common.cairo b/packages/governance/src/tests/governor/timestamp/common.cairo index 799fd9644..87337a5e5 100644 --- a/packages/governance/src/tests/governor/timestamp/common.cairo +++ b/packages/governance/src/tests/governor/timestamp/common.cairo @@ -5,7 +5,7 @@ use openzeppelin_interfaces::governor::{IGovernor, ProposalState}; use openzeppelin_test_common::mocks::governor::GovernorMock::SNIP12MetadataImpl; use openzeppelin_test_common::mocks::governor::{GovernorMock, GovernorTimelockedMock}; use openzeppelin_testing as utils; -use openzeppelin_testing::constants::{ADMIN, OTHER, VOTES_TOKEN, SUPPLY}; +use openzeppelin_testing::constants::{ADMIN, OTHER, SUPPLY, VOTES_TOKEN}; use openzeppelin_utils::bytearray::ByteArrayExtTrait; use openzeppelin_utils::serde::SerializedAppend; use snforge_std::{start_cheat_block_timestamp_global, start_mock_call}; diff --git a/packages/governance/src/tests/governor/timestamp/test_governor.cairo b/packages/governance/src/tests/governor/timestamp/test_governor.cairo index 71d6053e9..75fcb60cd 100644 --- a/packages/governance/src/tests/governor/timestamp/test_governor.cairo +++ b/packages/governance/src/tests/governor/timestamp/test_governor.cairo @@ -1,4 +1,5 @@ use core::num::traits::Bounded; +use openzeppelin_interfaces::governance::votes::{IVotesDispatcher, IVotesDispatcherTrait}; use openzeppelin_interfaces::governor::{ IGOVERNOR_ID, IGovernor, IGovernorDispatcher, IGovernorDispatcherTrait, ProposalState, }; @@ -9,11 +10,10 @@ use openzeppelin_test_common::mocks::timelock::{ IMockContractDispatcher, IMockContractDispatcherTrait, }; use openzeppelin_testing as utils; -use openzeppelin_testing::constants::{ADMIN, OTHER, VOTES_TOKEN, ZERO, SUPPLY, TIMESTAMP}; +use openzeppelin_testing::constants::{ADMIN, OTHER, SUPPLY, TIMESTAMP, VOTES_TOKEN, ZERO}; use openzeppelin_testing::{AsAddressTrait, spy_events}; use openzeppelin_utils::bytearray::ByteArrayExtTrait; use openzeppelin_utils::cryptography::snip12::OffchainMessageHash; -use openzeppelin_interfaces::governance::votes::{IVotesDispatcher, IVotesDispatcherTrait}; use snforge_std::signature::stark_curve::{StarkCurveKeyPairImpl, StarkCurveSignerImpl}; use snforge_std::{ start_cheat_block_timestamp_global, start_cheat_caller_address, start_cheat_chain_id_global, @@ -29,8 +29,9 @@ use crate::governor::{DefaultConfig, ProposalCore}; use crate::tests::governor::common::GovernorSpyHelpersImpl; use crate::tests::governor::timestamp::common::{ COMPONENT_STATE, CONTRACT_STATE, deploy_votes_token, get_calls, get_mock_state, - get_proposal_info, get_proposal_info_with_custom_delay, get_state, hash_proposal, setup_active_proposal, setup_canceled_proposal, - setup_defeated_proposal, setup_executed_proposal, setup_pending_proposal, setup_queued_proposal, + get_proposal_info, get_proposal_info_with_custom_delay, get_state, hash_proposal, + setup_active_proposal, setup_canceled_proposal, setup_defeated_proposal, + setup_executed_proposal, setup_pending_proposal, setup_queued_proposal, setup_succeeded_proposal, }; @@ -975,7 +976,7 @@ fn test__cast_vote_zero_delay() { deploy_votes_token(); delegate_votes_to(voter); initialize_votes_component(VOTES_TOKEN); - + // Setup proposal with 0 delay start_cheat_block_timestamp_global(TIMESTAMP); let (id, proposal) = get_proposal_info_with_custom_delay(0); @@ -995,7 +996,7 @@ fn test__cast_vote_zero_delay_after_some_time() { deploy_votes_token(); delegate_votes_to(voter); initialize_votes_component(VOTES_TOKEN); - + // Setup proposal with 0 delay start_cheat_block_timestamp_global(TIMESTAMP); let (id, proposal) = get_proposal_info_with_custom_delay(0);