Skip to content

Commit 7a82606

Browse files
committed
Add test for nested cheated calls
1 parent f9feca0 commit 7a82606

File tree

3 files changed

+61
-3
lines changed

3 files changed

+61
-3
lines changed

crates/forge/tests/data/simple_package_with_cheats/src/lib.cairo

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,37 @@ pub trait IHelloStarknet<TContractState> {
55
fn get_block_number(self: @TContractState) -> u64;
66
}
77

8+
#[starknet::interface]
9+
pub trait IHelloStarknetProxy<TContractState> {
10+
fn get_block_number(self: @TContractState) -> u64;
11+
}
12+
13+
#[starknet::contract]
14+
pub mod HelloStarknetProxy {
15+
use starknet::ContractAddress;
16+
use starknet::storage::{StoragePointerReadAccess, StoragePointerWriteAccess};
17+
use crate::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait};
18+
19+
#[storage]
20+
struct Storage {
21+
address: ContractAddress,
22+
}
23+
24+
#[constructor]
25+
fn constructor(ref self: ContractState, address: ContractAddress) {
26+
self.address.write(address);
27+
}
28+
29+
#[abi(embed_v0)]
30+
impl IHelloStarknetProxyImpl of super::IHelloStarknetProxy<ContractState> {
31+
fn get_block_number(self: @ContractState) -> u64 {
32+
let address = self.address.read();
33+
let proxied = IHelloStarknetDispatcher { contract_address: address };
34+
proxied.get_block_number()
35+
}
36+
}
37+
}
38+
839
#[starknet::contract]
940
pub mod HelloStarknet {
1041
use core::array::ArrayTrait;

crates/forge/tests/data/simple_package_with_cheats/tests/contract.cairo

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
use core::array::ArrayTrait;
22
use core::result::ResultTrait;
3-
use simple_package_with_cheats::{IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait};
3+
use simple_package_with_cheats::{
4+
IHelloStarknetDispatcher, IHelloStarknetDispatcherTrait, IHelloStarknetProxyDispatcher,
5+
IHelloStarknetProxyDispatcherTrait,
6+
};
47
use snforge_std::cheatcodes::contract_class::DeclareResultTrait;
58
use snforge_std::{ContractClassTrait, declare, start_cheat_block_number_global};
9+
use starknet::contract_address;
610

711
#[test]
812
fn call_and_invoke() {
@@ -21,3 +25,24 @@ fn call_and_invoke() {
2125
let block_number = dispatcher.get_block_number();
2226
assert(block_number == 123, 'block_info == 123');
2327
}
28+
29+
#[test]
30+
fn call_and_invoke_proxy() {
31+
let contract = declare("HelloStarknet").unwrap().contract_class();
32+
let constructor_calldata = @ArrayTrait::new();
33+
let (contract_address, _) = contract.deploy(constructor_calldata).unwrap();
34+
35+
let proxy_contract = declare("HelloStarknetProxy").unwrap().contract_class();
36+
let mut constructor_calldata = ArrayTrait::new();
37+
contract_address.serialize(ref constructor_calldata);
38+
let (proxy_contract_address, _) = proxy_contract.deploy(@constructor_calldata).unwrap();
39+
let dispatcher = IHelloStarknetProxyDispatcher { contract_address: proxy_contract_address };
40+
41+
let block_number = dispatcher.get_block_number();
42+
assert(block_number == 2000, 'block_number == 2000');
43+
44+
start_cheat_block_number_global(123);
45+
46+
let block_number = dispatcher.get_block_number();
47+
assert(block_number == 123, 'block_number == 123');
48+
}

crates/forge/tests/e2e/running.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,12 @@ fn simple_package_with_cheats() {
6363
[..]Finished[..]
6464
6565
66-
Collected 1 test(s) from simple_package_with_cheats package
66+
Collected 2 test(s) from simple_package_with_cheats package
6767
Running 0 test(s) from src/
68-
Running 1 test(s) from tests/
68+
Running 2 test(s) from tests/
6969
[PASS] simple_package_with_cheats_integrationtest::contract::call_and_invoke [..]
70+
[PASS] simple_package_with_cheats_integrationtest::contract::call_and_invoke_proxy [..]
71+
Tests: 2 passed, 0 failed, 0 ignored, 0 filtered out
7072
"},
7173
);
7274
}

0 commit comments

Comments
 (0)