Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
bb0d6db
feat(testing): verify indexed keys in event assertions
turkaturki Apr 3, 2025
68783cd
update CHANGELOG for indexed keys verification in event assertions
turkaturki Apr 3, 2025
3f27d68
chore: Update CHANGELOG
turkaturki Apr 7, 2025
f1628da
fix(testing): improve approach to event indexed key verification
turkaturki Apr 10, 2025
fe14a6b
Merge branch 'main' of https://github.com/turkaturki/cairo-contracts …
turkaturki Apr 10, 2025
ff1df2a
Merge branch 'main' of https://github.com/turkaturki/cairo-contracts …
turkaturki Apr 14, 2025
0ee2394
feat(testing): restore is_emitted to its original form
turkaturki Apr 14, 2025
9819d47
Merge branch 'main' of https://github.com/turkaturki/cairo-contracts …
turkaturki Apr 29, 2025
b1ffbab
Implement tests for event indexed keys across various components, inc…
turkaturki Apr 30, 2025
b3f8b74
Update CHANGELOG to include a single newline character at the end
turkaturki Apr 30, 2025
e71b558
fix formatting fails
turkaturki Apr 30, 2025
cc76361
fix: resolve compilation errors in ERC20 and ERC721 tests
turkaturki May 1, 2025
cf473a4
feat: add indexed keys to Paused and Unpaused events in PausableCompo…
turkaturki Jun 3, 2025
38f3124
fix: update token_id handling in ERC721 event tests to use felt252 type
turkaturki Jun 3, 2025
c503eba
Merge branch 'feature/check-indexed-keys-#1054' of github.com:turkatu…
ericnordelo Jul 16, 2025
1ffd190
feat: rollback unnecessary changes
ericnordelo Jul 16, 2025
4851c1f
feat: remove updates
ericnordelo Jul 16, 2025
11c548d
fix: macros
ericnordelo Jul 16, 2025
0640f63
feat: format files
ericnordelo Jul 28, 2025
651bc90
feat: test keys in access
ericnordelo Jul 28, 2025
481f317
Merge branch 'feat/bump-scarb-to-v2.12.0-rc.2' into feat/check-indexe…
ericnordelo Jul 28, 2025
ded3202
feat: add key tests for governance
ericnordelo Jul 28, 2025
4c13e4b
feat: add key tests for token
ericnordelo Jul 28, 2025
34480a1
feat: remove inline macro
ericnordelo Jul 28, 2025
661529e
feat: remove argument
ericnordelo Jul 28, 2025
c800abf
feat: add missing import
ericnordelo Jul 28, 2025
78df7c5
feat: added new macro
ericnordelo Jul 29, 2025
ffb2cae
feat: rename trait
ericnordelo Jul 30, 2025
7841734
feat: use scarb 2.12
ericnordelo Aug 5, 2025
2555c60
Merge branch 'main' of github.com:OpenZeppelin/cairo-contracts into f…
ericnordelo Aug 5, 2025
a947c2c
feat: format files
ericnordelo Aug 5, 2025
c932dad
Merge branch 'feat/check-indexed-keys-#1054' into feat/add-spy-event-…
ericnordelo Aug 5, 2025
82f51f9
Merge branch 'main' of github.com:OpenZeppelin/cairo-contracts into f…
ericnordelo Aug 6, 2025
a57a5bb
feat: bump foundry
ericnordelo Aug 6, 2025
5973bcf
Merge branch 'feat/check-indexed-keys-#1054' into feat/add-spy-event-…
ericnordelo Aug 6, 2025
7976b64
feat: finish refactor into v2
ericnordelo Aug 13, 2025
90cbbe6
Merge branch 'feat/refactor-macros-package-for-v2-##1485' into feat/a…
ericnordelo Aug 13, 2025
57f2ba0
feat: refactor to v2
ericnordelo Aug 13, 2025
1be2abc
feat: fix linter issues
ericnordelo Aug 13, 2025
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: 2 additions & 0 deletions Scarb.lock
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ dependencies = [
"openzeppelin_introspection",
"openzeppelin_test_common",
"openzeppelin_testing",
"openzeppelin_utils",
"snforge_std",
]

Expand Down Expand Up @@ -125,6 +126,7 @@ dependencies = [
"openzeppelin_interfaces",
"openzeppelin_test_common",
"openzeppelin_testing",
"openzeppelin_utils",
"snforge_std",
]

Expand Down
1 change: 1 addition & 0 deletions packages/access/Scarb.toml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ assert_macros.workspace = true
snforge_std.workspace = true
openzeppelin_testing = { path = "../testing" }
openzeppelin_test_common = { path = "../test_common" }
openzeppelin_utils = { path = "../utils" }

[lib]

Expand Down
52 changes: 33 additions & 19 deletions packages/access/src/tests/test_accesscontrol.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,10 @@ use openzeppelin_test_common::mocks::access::DualCaseAccessControlMock;
use openzeppelin_testing::constants::{
ADMIN, AUTHORIZED, OTHER, OTHER_ADMIN, OTHER_ROLE, ROLE, TIMESTAMP, ZERO,
};
use openzeppelin_testing::{EventSpyExt, EventSpyQueue as EventSpy, spy_events};
use openzeppelin_testing::{EventSpyExt, EventSpyQueue as EventSpy, ExpectedEvent, spy_events};
use snforge_std::{start_cheat_block_timestamp_global, start_cheat_caller_address, test_address};
use starknet::ContractAddress;
use crate::accesscontrol::AccessControlComponent::{
InternalImpl, RoleAdminChanged, RoleGranted, RoleGrantedWithDelay, RoleRevoked,
};
use crate::accesscontrol::AccessControlComponent::InternalImpl;
use crate::accesscontrol::{AccessControlComponent, DEFAULT_ADMIN_ROLE};

//
Expand Down Expand Up @@ -700,9 +698,12 @@ pub impl AccessControlSpyHelpersImpl of AccessControlSpyHelpers {
account: ContractAddress,
sender: ContractAddress,
) {
let expected = AccessControlComponent::Event::RoleRevoked(
RoleRevoked { role, account, sender },
);
let expected = ExpectedEvent::new()
.key(selector!("RoleRevoked"))
.data(role)
.data(account)
.data(sender);

self.assert_emitted_single(contract, expected);
}

Expand All @@ -713,9 +714,12 @@ pub impl AccessControlSpyHelpersImpl of AccessControlSpyHelpers {
account: ContractAddress,
sender: ContractAddress,
) {
let expected = AccessControlComponent::Event::RoleRevoked(
RoleRevoked { role, account, sender },
);
let expected = ExpectedEvent::new()
.key(selector!("RoleRevoked"))
.data(role)
.data(account)
.data(sender);

self.assert_only_event(contract, expected);
}

Expand All @@ -726,9 +730,12 @@ pub impl AccessControlSpyHelpersImpl of AccessControlSpyHelpers {
account: ContractAddress,
sender: ContractAddress,
) {
let expected = AccessControlComponent::Event::RoleGranted(
RoleGranted { role, account, sender },
);
let expected = ExpectedEvent::new()
.key(selector!("RoleGranted"))
.data(role)
.data(account)
.data(sender);

self.assert_only_event(contract, expected);
}

Expand All @@ -740,9 +747,13 @@ pub impl AccessControlSpyHelpersImpl of AccessControlSpyHelpers {
sender: ContractAddress,
delay: u64,
) {
let expected = AccessControlComponent::Event::RoleGrantedWithDelay(
RoleGrantedWithDelay { role, account, sender, delay },
);
let expected = ExpectedEvent::new()
.key(selector!("RoleGrantedWithDelay"))
.data(role)
.data(account)
.data(sender)
.data(delay);

self.assert_only_event(contract, expected);
}

Expand All @@ -753,9 +764,12 @@ pub impl AccessControlSpyHelpersImpl of AccessControlSpyHelpers {
previous_admin_role: felt252,
new_admin_role: felt252,
) {
let expected = AccessControlComponent::Event::RoleAdminChanged(
RoleAdminChanged { role, previous_admin_role, new_admin_role },
);
let expected = ExpectedEvent::new()
.key(selector!("RoleAdminChanged"))
.data(role)
.data(previous_admin_role)
.data(new_admin_role);

self.assert_only_event(from_address, expected);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,10 @@ use openzeppelin_test_common::mocks::access::DualCaseAccessControlDefaultAdminRu
use openzeppelin_testing::constants::{
ADMIN, AUTHORIZED, OTHER, OTHER_ADMIN, OTHER_ROLE, ROLE, TIMESTAMP, ZERO,
};
use openzeppelin_testing::{EventSpyExt, EventSpyQueue as EventSpy, spy_events};
use openzeppelin_testing::{EventSpyExt, EventSpyQueue as EventSpy, ExpectedEvent, spy_events};
use snforge_std::{start_cheat_block_timestamp_global, start_cheat_caller_address, test_address};
use starknet::ContractAddress;
use crate::accesscontrol::extensions::AccessControlDefaultAdminRulesComponent::{
DefaultAdminDelayChangeCanceled, DefaultAdminDelayChangeScheduled, DefaultAdminTransferCanceled,
DefaultAdminTransferScheduled, InternalTrait,
};
use crate::accesscontrol::extensions::AccessControlDefaultAdminRulesComponent::InternalTrait;
use crate::accesscontrol::extensions::{
AccessControlDefaultAdminRulesComponent, DEFAULT_ADMIN_ROLE, DefaultConfig,
};
Expand Down Expand Up @@ -1169,39 +1166,38 @@ impl AccessControlDefaultAdminRulesSpyHelpersImpl of AccessControlDefaultAdminRu
new_admin: ContractAddress,
accept_schedule: u64,
) {
let expected =
AccessControlDefaultAdminRulesComponent::Event::DefaultAdminTransferScheduled(
DefaultAdminTransferScheduled { new_admin, accept_schedule },
);
let expected = ExpectedEvent::new()
.key(selector!("DefaultAdminTransferScheduled"))
.key(new_admin)
.data(accept_schedule);

self.assert_only_event(contract, expected);
}

fn assert_only_event_default_admin_transfer_canceled(
ref self: EventSpy, contract: ContractAddress,
) {
let expected = AccessControlDefaultAdminRulesComponent::Event::DefaultAdminTransferCanceled(
DefaultAdminTransferCanceled {},
);
let expected = ExpectedEvent::new().key(selector!("DefaultAdminTransferCanceled"));

self.assert_only_event(contract, expected);
}

fn assert_only_event_default_admin_delay_change_scheduled(
ref self: EventSpy, contract: ContractAddress, new_delay: u64, effect_schedule: u64,
) {
let expected =
AccessControlDefaultAdminRulesComponent::Event::DefaultAdminDelayChangeScheduled(
DefaultAdminDelayChangeScheduled { new_delay, effect_schedule },
);
let expected = ExpectedEvent::new()
.key(selector!("DefaultAdminDelayChangeScheduled"))
.data(new_delay)
.data(effect_schedule);

self.assert_only_event(contract, expected);
}

fn assert_only_event_default_admin_delay_change_canceled(
ref self: EventSpy, contract: ContractAddress,
) {
let expected =
AccessControlDefaultAdminRulesComponent::Event::DefaultAdminDelayChangeCanceled(
DefaultAdminDelayChangeCanceled {},
);
let expected = ExpectedEvent::new().key(selector!("DefaultAdminDelayChangeCanceled"));

self.assert_only_event(contract, expected);
}
}
14 changes: 9 additions & 5 deletions packages/access/src/tests/test_ownable_twostep.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@ use openzeppelin_test_common::mocks::access::DualCaseTwoStepOwnableMock;
use openzeppelin_test_common::ownable::OwnableSpyHelpers;
use openzeppelin_testing::constants::{NEW_OWNER, OTHER, OWNER, ZERO};
use openzeppelin_testing::{EventSpyExt, EventSpyQueue as EventSpy, spy_events};
use snforge_std::{start_cheat_caller_address, test_address};
use openzeppelin_utils::serde::SerializedAppend;
use snforge_std::{Event, start_cheat_caller_address, test_address};
use starknet::ContractAddress;
use starknet::storage::{StoragePointerReadAccess, StoragePointerWriteAccess};
use crate::ownable::OwnableComponent;
use crate::ownable::OwnableComponent::{InternalTrait, OwnershipTransferStarted};
use crate::ownable::OwnableComponent::InternalTrait;

//
// Setup
Expand Down Expand Up @@ -291,9 +292,12 @@ impl TwoStepSpyHelpersImpl of TwoStepSpyHelpers {
previous_owner: ContractAddress,
new_owner: ContractAddress,
) {
let expected = OwnableComponent::Event::OwnershipTransferStarted(
OwnershipTransferStarted { previous_owner, new_owner },
);
let mut keys = array![];
keys.append_serde(selector!("OwnershipTransferStarted"));
keys.append_serde(previous_owner);
keys.append_serde(new_owner);

let expected = Event { keys, data: array![] };
self.assert_emitted_single(from_address, expected);
}
}
2 changes: 1 addition & 1 deletion packages/finance/src/tests/test_vesting_linear.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use openzeppelin_interfaces::erc20::{IERC20Dispatcher, IERC20DispatcherTrait};
use openzeppelin_interfaces::ownable::{IOwnableDispatcher, IOwnableDispatcherTrait};
use openzeppelin_interfaces::vesting::IVestingDispatcherTrait;
use openzeppelin_test_common::mocks::vesting::LinearVestingMock;
use openzeppelin_test_common::vesting::VestingSpyHelpers;
use openzeppelin_test_common::vesting::VestingSpyHelpersTrait;
use openzeppelin_testing::constants::{OTHER, OWNER};
use openzeppelin_testing::{EventSpyExt, spy_events};
use snforge_std::{start_cheat_block_timestamp_global, start_cheat_caller_address};
Expand Down
2 changes: 1 addition & 1 deletion packages/finance/src/tests/test_vesting_steps.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use openzeppelin_interfaces::erc20::{IERC20Dispatcher, IERC20DispatcherTrait};
use openzeppelin_interfaces::ownable::{IOwnableDispatcher, IOwnableDispatcherTrait};
use openzeppelin_interfaces::vesting::IVestingDispatcherTrait;
use openzeppelin_test_common::mocks::vesting::StepsVestingMock;
use openzeppelin_test_common::vesting::VestingSpyHelpers;
use openzeppelin_test_common::vesting::VestingSpyHelpersTrait;
use openzeppelin_testing::constants::{OTHER, OWNER};
use openzeppelin_testing::spy_events;
use snforge_std::{start_cheat_block_timestamp_global, start_cheat_caller_address};
Expand Down
1 change: 0 additions & 1 deletion packages/governance/src/governor/proposal_core.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,6 @@ mod tests {
use core::num::traits::Bounded;
use openzeppelin_testing::constants::ALICE;
use openzeppelin_testing::{FuzzableBool, FuzzableContractAddress};
use starknet::ContractAddress;
use super::{ProposalCore, ProposalCoreStorePacking as StorePacking};

#[test]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
use openzeppelin_test_common::mocks::governor::GovernorTimelockedMock::SNIP12MetadataImpl;
use openzeppelin_testing::constants::OTHER;
use openzeppelin_testing::{EventSpyExt, EventSpyQueue as EventSpy, spy_events};
use snforge_std::{start_cheat_caller_address, test_address};
use openzeppelin_utils::serde::SerializedAppend;
use snforge_std::{Event, start_cheat_caller_address, test_address};
use starknet::ContractAddress;
use starknet::storage::StoragePointerWriteAccess;
use crate::governor::DefaultConfig;
use crate::governor::GovernorComponent::InternalImpl;
use crate::governor::extensions::GovernorSettingsComponent;
use crate::governor::extensions::GovernorSettingsComponent::{
GovernorSettings, GovernorSettingsAdminImpl, InternalImpl as GovernorSettingsInternalImpl,
};
Expand All @@ -15,6 +15,7 @@ use crate::tests::governor::block_number::common::{
set_executor,
};


//
// Extensions
//
Expand Down Expand Up @@ -395,9 +396,14 @@ pub(crate) impl GovernorSettingsSpyHelpersImpl of GovernorSettingsSpyHelpers {
fn assert_event_voting_delay_updated(
ref self: EventSpy, contract: ContractAddress, old_voting_delay: u64, new_voting_delay: u64,
) {
let expected = GovernorSettingsComponent::Event::VotingDelayUpdated(
GovernorSettingsComponent::VotingDelayUpdated { old_voting_delay, new_voting_delay },
);
let mut keys = array![];
keys.append_serde(selector!("VotingDelayUpdated"));

let mut data = array![];
data.append_serde(old_voting_delay);
data.append_serde(new_voting_delay);

let expected = Event { keys, data };
self.assert_emitted_single(contract, expected);
}

Expand All @@ -414,9 +420,14 @@ pub(crate) impl GovernorSettingsSpyHelpersImpl of GovernorSettingsSpyHelpers {
old_voting_period: u64,
new_voting_period: u64,
) {
let expected = GovernorSettingsComponent::Event::VotingPeriodUpdated(
GovernorSettingsComponent::VotingPeriodUpdated { old_voting_period, new_voting_period },
);
let mut keys = array![];
keys.append_serde(selector!("VotingPeriodUpdated"));

let mut data = array![];
data.append_serde(old_voting_period);
data.append_serde(new_voting_period);

let expected = Event { keys, data };
self.assert_emitted_single(contract, expected);
}

Expand All @@ -436,11 +447,14 @@ pub(crate) impl GovernorSettingsSpyHelpersImpl of GovernorSettingsSpyHelpers {
old_proposal_threshold: u256,
new_proposal_threshold: u256,
) {
let expected = GovernorSettingsComponent::Event::ProposalThresholdUpdated(
GovernorSettingsComponent::ProposalThresholdUpdated {
old_proposal_threshold, new_proposal_threshold,
},
);
let mut keys = array![];
keys.append_serde(selector!("ProposalThresholdUpdated"));

let mut data = array![];
data.append_serde(old_proposal_threshold);
data.append_serde(new_proposal_threshold);

let expected = Event { keys, data };
self.assert_emitted_single(contract, expected);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,17 @@ use openzeppelin_test_common::mocks::governor::GovernorQuorumFractionMock;
use openzeppelin_test_common::mocks::governor::GovernorQuorumFractionMock::SNIP12MetadataImpl;
use openzeppelin_testing::constants::{OTHER, VOTES_TOKEN, ZERO};
use openzeppelin_testing::{EventSpyExt, EventSpyQueue as EventSpy, spy_events};
use snforge_std::{start_cheat_block_number_global, start_mock_call, test_address};
use openzeppelin_utils::serde::SerializedAppend;
use snforge_std::{Event, start_cheat_block_number_global, start_mock_call, test_address};
use starknet::ContractAddress;
use crate::governor::GovernorComponent::InternalImpl;
use crate::governor::extensions::GovernorVotesQuorumFractionComponent;
use crate::governor::extensions::GovernorVotesQuorumFractionComponent::{
GovernorQuorum, GovernorVotes, InternalTrait, QuorumFractionImpl,
};
use crate::governor::{DefaultConfig, GovernorComponent};
use crate::tests::governor::block_number::common::deploy_votes_token;


pub type ComponentState =
GovernorComponent::ComponentState<GovernorQuorumFractionMock::ContractState>;

Expand Down Expand Up @@ -240,11 +241,14 @@ pub(crate) impl GovernorSettingsSpyHelpersImpl of GovernorSettingsSpyHelpers {
old_quorum_numerator: u256,
new_quorum_numerator: u256,
) {
let expected = GovernorVotesQuorumFractionComponent::Event::QuorumNumeratorUpdated(
GovernorVotesQuorumFractionComponent::QuorumNumeratorUpdated {
old_quorum_numerator, new_quorum_numerator,
},
);
let mut keys = array![];
keys.append_serde(selector!("QuorumNumeratorUpdated"));

let mut data = array![];
data.append_serde(old_quorum_numerator);
data.append_serde(new_quorum_numerator);

let expected = Event { keys, data };
self.assert_emitted_single(contract, expected);
}

Expand Down
Loading
Loading