Skip to content

Commit

Permalink
Migrate erc721 tests (#1027)
Browse files Browse the repository at this point in the history
* feat: migrate event tests

* feat: update workflow

* feat: add foundry utils

* feat: finish erc20 and erc20votes migration

* feat: remove dual case tests

* refactor: format files

* refactor: variable name

* Update src/tests/token.cairo

Co-authored-by: Andrew Fleming <[email protected]>

* Update src/tests/token/erc20.cairo

Co-authored-by: Andrew Fleming <[email protected]>

* Update src/tests/utils/foundry.cairo

Co-authored-by: Andrew Fleming <[email protected]>

* Update src/tests/token/erc20/test_erc20_votes.cairo

Co-authored-by: Andrew Fleming <[email protected]>

* feat: apply review updates

* feat: migrate erc721 components tests

* refactor: remove extra line

* feat: apply review updates

* feat: update utilities

* feat: apply review updates

* fix: ignore tests

---------

Co-authored-by: Andrew Fleming <[email protected]>
  • Loading branch information
ericnordelo and andrew-fleming authored Jul 11, 2024
1 parent c3df288 commit ef89fb2
Show file tree
Hide file tree
Showing 8 changed files with 473 additions and 314 deletions.
2 changes: 1 addition & 1 deletion src/tests/token.cairo
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
pub(crate) mod erc1155;
// pub(crate) mod erc721;
pub(crate) mod erc20;
pub(crate) mod erc721;
1 change: 0 additions & 1 deletion src/tests/token/erc20/common.cairo
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
use openzeppelin::tests::utils::events::EventSpyExt;
use openzeppelin::token::erc20::ERC20Component::{Approval, Transfer};
use openzeppelin::token::erc20::ERC20Component;
use openzeppelin::utils::serde::SerializedAppend;
use snforge_std::EventSpy;
use starknet::ContractAddress;

Expand Down
1 change: 1 addition & 0 deletions src/tests/token/erc721.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@ pub(crate) mod common;
mod test_dual721;
mod test_dual721_receiver;
mod test_erc721;
mod test_erc721_receiver;
131 changes: 66 additions & 65 deletions src/tests/token/erc721/common.cairo
Original file line number Diff line number Diff line change
@@ -1,75 +1,76 @@
use openzeppelin::tests::utils;
use openzeppelin::tests::utils::events::EventSpyExt;
use openzeppelin::token::erc721::ERC721Component::{Approval, ApprovalForAll, Transfer};
use openzeppelin::token::erc721::ERC721Component;
use openzeppelin::utils::serde::SerializedAppend;
use snforge_std::EventSpy;
use starknet::ContractAddress;

pub(crate) fn assert_event_approval_for_all(
contract: ContractAddress, owner: ContractAddress, operator: ContractAddress, approved: bool
) {
let event = utils::pop_log::<ERC721Component::Event>(contract).unwrap();
let expected = ERC721Component::Event::ApprovalForAll(
ApprovalForAll { owner, operator, approved }
);
assert!(event == expected);
#[generate_trait]
pub(crate) impl ERC721SpyHelpersImpl of ERC721SpyHelpers {
fn assert_event_approval_for_all(
ref self: EventSpy,
contract: ContractAddress,
owner: ContractAddress,
operator: ContractAddress,
approved: bool
) {
let expected = ERC721Component::Event::ApprovalForAll(
ApprovalForAll { owner, operator, approved }
);
self.assert_emitted_single(contract, expected);
}

// Check indexed keys
let mut indexed_keys = array![];
indexed_keys.append_serde(selector!("ApprovalForAll"));
indexed_keys.append_serde(owner);
indexed_keys.append_serde(operator);
utils::assert_indexed_keys(event, indexed_keys.span());
}

pub(crate) fn assert_only_event_approval_for_all(
contract: ContractAddress, owner: ContractAddress, operator: ContractAddress, approved: bool
) {
assert_event_approval_for_all(contract, owner, operator, approved);
utils::assert_no_events_left(contract);
}

pub(crate) fn assert_event_approval(
contract: ContractAddress, owner: ContractAddress, approved: ContractAddress, token_id: u256
) {
let event = utils::pop_log::<ERC721Component::Event>(contract).unwrap();
let expected = ERC721Component::Event::Approval(Approval { owner, approved, token_id });
assert!(event == expected);
fn assert_only_event_approval_for_all(
ref self: EventSpy,
contract: ContractAddress,
owner: ContractAddress,
operator: ContractAddress,
approved: bool
) {
self.assert_event_approval_for_all(contract, owner, operator, approved);
self.assert_no_events_left_from(contract);
}

// Check indexed keys
let mut indexed_keys = array![];
indexed_keys.append_serde(selector!("Approval"));
indexed_keys.append_serde(owner);
indexed_keys.append_serde(approved);
indexed_keys.append_serde(token_id);
utils::assert_indexed_keys(event, indexed_keys.span());
}

pub(crate) fn assert_only_event_approval(
contract: ContractAddress, owner: ContractAddress, approved: ContractAddress, token_id: u256
) {
assert_event_approval(contract, owner, approved, token_id);
utils::assert_no_events_left(contract);
}
fn assert_event_approval(
ref self: EventSpy,
contract: ContractAddress,
owner: ContractAddress,
approved: ContractAddress,
token_id: u256
) {
let expected = ERC721Component::Event::Approval(Approval { owner, approved, token_id });
self.assert_emitted_single(contract, expected);
}

pub(crate) fn assert_event_transfer(
contract: ContractAddress, from: ContractAddress, to: ContractAddress, token_id: u256
) {
let event = utils::pop_log::<ERC721Component::Event>(contract).unwrap();
let expected = ERC721Component::Event::Transfer(Transfer { from, to, token_id });
assert!(event == expected);
fn assert_only_event_approval(
ref self: EventSpy,
contract: ContractAddress,
owner: ContractAddress,
approved: ContractAddress,
token_id: u256
) {
self.assert_event_approval(contract, owner, approved, token_id);
self.assert_no_events_left_from(contract);
}

// Check indexed keys
let mut indexed_keys = array![];
indexed_keys.append_serde(selector!("Transfer"));
indexed_keys.append_serde(from);
indexed_keys.append_serde(to);
indexed_keys.append_serde(token_id);
utils::assert_indexed_keys(event, indexed_keys.span());
}
fn assert_event_transfer(
ref self: EventSpy,
contract: ContractAddress,
from: ContractAddress,
to: ContractAddress,
token_id: u256
) {
let expected = ERC721Component::Event::Transfer(Transfer { from, to, token_id });
self.assert_emitted_single(contract, expected);
}

pub(crate) fn assert_only_event_transfer(
contract: ContractAddress, from: ContractAddress, to: ContractAddress, token_id: u256
) {
assert_event_transfer(contract, from, to, token_id);
utils::assert_no_events_left(contract);
fn assert_only_event_transfer(
ref self: EventSpy,
contract: ContractAddress,
from: ContractAddress,
to: ContractAddress,
token_id: u256
) {
self.assert_event_transfer(contract, from, to, token_id);
self.assert_no_events_left_from(contract);
}
}
Loading

0 comments on commit ef89fb2

Please sign in to comment.