Skip to content
Merged
Show file tree
Hide file tree
Changes from 25 commits
Commits
Show all changes
35 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
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
82f51f9
Merge branch 'main' of github.com:OpenZeppelin/cairo-contracts into f…
ericnordelo Aug 6, 2025
a57a5bb
feat: bump foundry
ericnordelo Aug 6, 2025
e1364de
Merge branch 'main' of github.com:OpenZeppelin/cairo-contracts into f…
ericnordelo Aug 15, 2025
7c8e8ca
feat: apply review updates
ericnordelo Aug 15, 2025
d6e0504
Merge branch 'main' into feat/check-indexed-keys-#1054
ericnordelo Aug 18, 2025
6424558
Merge branch 'main' of github.com:OpenZeppelin/cairo-contracts into f…
ericnordelo Aug 18, 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 @@ -28,6 +28,7 @@ dependencies = [
"openzeppelin_introspection",
"openzeppelin_test_common",
"openzeppelin_testing",
"openzeppelin_utils",
"snforge_std",
]

Expand Down Expand Up @@ -110,6 +111,7 @@ version = "3.0.0-alpha.0"
dependencies = [
"openzeppelin_test_common",
"openzeppelin_testing",
"openzeppelin_utils",
"snforge_std",
]

Expand Down
8 changes: 4 additions & 4 deletions Scarb.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ edition.workspace = true
[workspace.package]
version = "3.0.0-alpha.0"
edition = "2024_07"
cairo-version = "2.11.4"
scarb-version = "2.11.4"
cairo-version = "2.12.0-rc.2"
scarb-version = "2.12.0-rc.2"
authors = ["OpenZeppelin Community <maintainers@openzeppelin.org>"]
description = "OpenZeppelin Contracts written in Cairo for Starknet, a decentralized ZK Rollup"
documentation = "https://docs.openzeppelin.com/contracts-cairo"
Expand All @@ -42,8 +42,8 @@ keywords = [
]

[workspace.dependencies]
assert_macros = "2.11.4"
starknet = "2.11.4"
assert_macros = "2.12.0-rc.2"
starknet = "2.12.0-rc.2"
snforge_std = "0.46.0"

[dependencies]
Expand Down
1 change: 1 addition & 0 deletions packages/access/Scarb.toml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,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
70 changes: 51 additions & 19 deletions packages/access/src/tests/test_accesscontrol.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@ use openzeppelin_testing::constants::{
ADMIN, AUTHORIZED, OTHER, OTHER_ADMIN, OTHER_ROLE, ROLE, TIMESTAMP, ZERO,
};
use openzeppelin_testing::{EventSpyExt, EventSpyQueue as EventSpy, 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 openzeppelin_utils::serde::SerializedAppend;
use snforge_std::{
Event, start_cheat_block_timestamp_global, start_cheat_caller_address, test_address,
};
use starknet::ContractAddress;
use crate::accesscontrol::AccessControlComponent::InternalImpl;
use crate::accesscontrol::interface::{
IACCESSCONTROL_ID, IAccessControl, IAccessControlCamel, IAccessControlWithDelay, RoleStatus,
};
Expand Down Expand Up @@ -700,9 +701,15 @@ pub impl AccessControlSpyHelpersImpl of AccessControlSpyHelpers {
account: ContractAddress,
sender: ContractAddress,
) {
let expected = AccessControlComponent::Event::RoleRevoked(
RoleRevoked { role, account, sender },
);
let mut keys = array![];
keys.append_serde(selector!("RoleRevoked"));

let mut data = array![];
data.append_serde(role);
data.append_serde(account);
data.append_serde(sender);

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

Expand All @@ -713,9 +720,15 @@ pub impl AccessControlSpyHelpersImpl of AccessControlSpyHelpers {
account: ContractAddress,
sender: ContractAddress,
) {
let expected = AccessControlComponent::Event::RoleRevoked(
RoleRevoked { role, account, sender },
);
let mut keys = array![];
keys.append_serde(selector!("RoleRevoked"));

let mut data = array![];
data.append_serde(role);
data.append_serde(account);
data.append_serde(sender);

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

Expand All @@ -726,9 +739,15 @@ pub impl AccessControlSpyHelpersImpl of AccessControlSpyHelpers {
account: ContractAddress,
sender: ContractAddress,
) {
let expected = AccessControlComponent::Event::RoleGranted(
RoleGranted { role, account, sender },
);
let mut keys = array![];
keys.append_serde(selector!("RoleGranted"));

let mut data = array![];
data.append_serde(role);
data.append_serde(account);
data.append_serde(sender);

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

Expand All @@ -740,9 +759,16 @@ pub impl AccessControlSpyHelpersImpl of AccessControlSpyHelpers {
sender: ContractAddress,
delay: u64,
) {
let expected = AccessControlComponent::Event::RoleGrantedWithDelay(
RoleGrantedWithDelay { role, account, sender, delay },
);
let mut keys = array![];
keys.append_serde(selector!("RoleGrantedWithDelay"));

let mut data = array![];
data.append_serde(role);
data.append_serde(account);
data.append_serde(sender);
data.append_serde(delay);

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

Expand All @@ -753,9 +779,15 @@ 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 mut keys = array![];
keys.append_serde(selector!("RoleAdminChanged"));

let mut data = array![];
data.append_serde(role);
data.append_serde(previous_admin_role);
data.append_serde(new_admin_role);

let expected = Event { keys, data };
self.assert_only_event(from_address, expected);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ use openzeppelin_testing::constants::{
ADMIN, AUTHORIZED, OTHER, OTHER_ADMIN, OTHER_ROLE, ROLE, TIMESTAMP, ZERO,
};
use openzeppelin_testing::{EventSpyExt, EventSpyQueue as EventSpy, 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 openzeppelin_utils::serde::SerializedAppend;
use snforge_std::{
Event, start_cheat_block_timestamp_global, start_cheat_caller_address, test_address,
};
use starknet::ContractAddress;
use crate::accesscontrol::extensions::AccessControlDefaultAdminRulesComponent::InternalTrait;
use crate::accesscontrol::extensions::interface::{
IACCESSCONTROL_DEFAULT_ADMIN_RULES_ID, IAccessControlDefaultAdminRules,
};
Expand Down Expand Up @@ -1169,39 +1169,48 @@ impl AccessControlDefaultAdminRulesSpyHelpersImpl of AccessControlDefaultAdminRu
new_admin: ContractAddress,
accept_schedule: u64,
) {
let expected =
AccessControlDefaultAdminRulesComponent::Event::DefaultAdminTransferScheduled(
DefaultAdminTransferScheduled { new_admin, accept_schedule },
);
let mut keys = array![];
keys.append_serde(selector!("DefaultAdminTransferScheduled"));
keys.append_serde(new_admin);

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

let expected = Event { keys, data };
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 mut keys = array![];
keys.append_serde(selector!("DefaultAdminTransferCanceled"));

let expected = Event { keys, data: array![] };
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 mut keys = array![];
keys.append_serde(selector!("DefaultAdminDelayChangeScheduled"));

let mut data = array![];
data.append_serde(new_delay);
data.append_serde(effect_schedule);

let expected = Event { keys, data };
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 mut keys = array![];
keys.append_serde(selector!("DefaultAdminDelayChangeCanceled"));

let expected = Event { keys, data: array![] };
self.assert_only_event(contract, expected);
}
}
12 changes: 8 additions & 4 deletions packages/access/src/tests/test_ownable_twostep.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ 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;
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);
}
}
7 changes: 2 additions & 5 deletions packages/governance/src/governor/governor.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -965,11 +965,8 @@ pub mod GovernorComponent {
description_hash: felt252,
) {
let valid_states = array![
ProposalState::Pending,
ProposalState::Active,
ProposalState::Defeated,
ProposalState::Succeeded,
ProposalState::Queued,
ProposalState::Pending, ProposalState::Active, ProposalState::Defeated,
ProposalState::Succeeded, ProposalState::Queued,
];
self.validate_state(proposal_id, valid_states.span());

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
Loading
Loading