Skip to content

Commit 7529124

Browse files
test(payments): add test utils
1 parent 8117479 commit 7529124

File tree

4 files changed

+137
-29
lines changed

4 files changed

+137
-29
lines changed

src/tests.cairo

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1+
pub mod account_contract;
12
pub mod test_payments;
3+
pub mod test_utils;

src/tests/account_contract.cairo

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
#[starknet::contract(account)]
2+
pub mod SRC9AccountMock {
3+
use openzeppelin::account::AccountComponent;
4+
use openzeppelin::account::extensions::SRC9Component;
5+
use openzeppelin::introspection::src5::SRC5Component;
6+
use starknet::storage::StoragePointerWriteAccess;
7+
8+
component!(path: AccountComponent, storage: account, event: AccountEvent);
9+
component!(path: SRC5Component, storage: src5, event: SRC5Event);
10+
component!(path: SRC9Component, storage: src9, event: SRC9Event);
11+
12+
// Account
13+
#[abi(embed_v0)]
14+
impl SRC6Impl = AccountComponent::SRC6Impl<ContractState>;
15+
#[abi(embed_v0)]
16+
impl PublicKeyImpl = AccountComponent::PublicKeyImpl<ContractState>;
17+
impl AccountInternalImpl = AccountComponent::InternalImpl<ContractState>;
18+
19+
// SRC9
20+
#[abi(embed_v0)]
21+
impl OutsideExecutionV2Impl =
22+
SRC9Component::OutsideExecutionV2Impl<ContractState>;
23+
impl OutsideExecutionInternalImpl = SRC9Component::InternalImpl<ContractState>;
24+
25+
// SCR5
26+
#[abi(embed_v0)]
27+
impl SRC5Impl = SRC5Component::SRC5Impl<ContractState>;
28+
29+
#[storage]
30+
pub struct Storage {
31+
pub value: felt252,
32+
#[substorage(v0)]
33+
pub account: AccountComponent::Storage,
34+
#[substorage(v0)]
35+
pub src9: SRC9Component::Storage,
36+
#[substorage(v0)]
37+
pub src5: SRC5Component::Storage,
38+
}
39+
40+
#[event]
41+
#[derive(Drop, starknet::Event)]
42+
enum Event {
43+
#[flat]
44+
AccountEvent: AccountComponent::Event,
45+
#[flat]
46+
SRC9Event: SRC9Component::Event,
47+
#[flat]
48+
SRC5Event: SRC5Component::Event,
49+
}
50+
51+
#[constructor]
52+
fn constructor(ref self: ContractState, public_key: felt252) {
53+
self.account.initializer(public_key);
54+
self.src9.initializer();
55+
}
56+
57+
#[abi(per_item)]
58+
#[generate_trait]
59+
impl ExternalImpl of ExternalTrait {
60+
#[external(v0)]
61+
fn set_value(ref self: ContractState, value: felt252, panic: bool) {
62+
self.account.assert_only_self();
63+
if panic {
64+
panic!("Some error");
65+
}
66+
self.value.write(value);
67+
}
68+
}
69+
}

src/tests/test_payments.cairo

Lines changed: 2 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
use core::num::traits::Zero;
2-
use openzeppelin::utils::serde::SerializedAppend;
3-
use openzeppelin_testing::deployment::declare_and_deploy;
42
use snforge_std::{map_entry_address, store};
53
use starknet::ContractAddress;
64
use starknet_payments::errors;
@@ -9,37 +7,12 @@ use starknet_payments::interface::{
97
IPaymentsSafeDispatcherTrait,
108
};
119
use starkware_utils::time::time::Timestamp;
10+
use starkware_utils_testing::constants as testing_constants;
1211
use starkware_utils_testing::test_utils::{
1312
assert_panic_with_error, assert_panic_with_felt_error, cheat_caller_address_once,
1413
};
15-
use starkware_utils_testing::{constants as testing_constants, test_utils};
1614
use crate::order::Order;
17-
18-
pub mod constants {
19-
use super::*;
20-
pub const UPGRADE_DELAY: u64 = 0;
21-
pub const FEE_LIMIT: u128 = 1000;
22-
pub const FEE_RECIPIENT: ContractAddress = 'FEE_RECIPIENT'.try_into().unwrap();
23-
pub const FEE: u128 = 0;
24-
}
25-
26-
fn deploy_contract() -> ContractAddress {
27-
let mut calldata = array![];
28-
calldata.append_serde(testing_constants::GOVERNANCE_ADMIN);
29-
calldata.append_serde(constants::UPGRADE_DELAY);
30-
calldata.append_serde(constants::FEE_LIMIT);
31-
calldata.append_serde(constants::FEE_RECIPIENT);
32-
calldata.append_serde(constants::FEE);
33-
declare_and_deploy("payments", calldata)
34-
}
35-
36-
pub fn init_contract_with_roles() -> ContractAddress {
37-
let contract_address = deploy_contract();
38-
test_utils::set_default_roles(
39-
contract: contract_address, governance_admin: testing_constants::GOVERNANCE_ADMIN,
40-
);
41-
contract_address
42-
}
15+
use crate::tests::test_utils::*;
4316

4417
fn default_order() -> Order {
4518
Order {

src/tests/test_utils.cairo

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
use openzeppelin::utils::serde::SerializedAppend;
2+
use openzeppelin_testing::deployment::declare_and_deploy;
3+
use snforge_std::signature::stark_curve::{StarkCurveKeyPairImpl, StarkCurveSignerImpl};
4+
use snforge_std::signature::{KeyPair, KeyPairTrait};
5+
use snforge_std::{Token, TokenImpl, TokenTrait, set_balance};
6+
use starknet::ContractAddress;
7+
use starkware_utils_testing::{constants as testing_constants, test_utils};
8+
use crate::payments::payments::SNIP12MetadataImpl;
9+
10+
pub mod constants {
11+
use super::*;
12+
pub const UPGRADE_DELAY: u64 = 0;
13+
pub const FEE_LIMIT: u128 = 1000;
14+
pub const FEE_RECIPIENT: ContractAddress = 'FEE_RECIPIENT'.try_into().unwrap();
15+
pub const FEE: u128 = 100;
16+
}
17+
18+
fn deploy_contract() -> ContractAddress {
19+
let mut calldata = array![];
20+
calldata.append_serde(testing_constants::GOVERNANCE_ADMIN);
21+
calldata.append_serde(constants::UPGRADE_DELAY);
22+
calldata.append_serde(constants::FEE_LIMIT);
23+
calldata.append_serde(constants::FEE_RECIPIENT);
24+
calldata.append_serde(constants::FEE);
25+
declare_and_deploy("payments", calldata)
26+
}
27+
28+
pub fn init_contract_with_roles() -> ContractAddress {
29+
let contract_address = deploy_contract();
30+
test_utils::set_default_roles(
31+
contract: contract_address, governance_admin: testing_constants::GOVERNANCE_ADMIN,
32+
);
33+
contract_address
34+
}
35+
36+
pub fn test_setup() -> (
37+
ContractAddress,
38+
ContractAddress,
39+
ContractAddress,
40+
ContractAddress,
41+
ContractAddress,
42+
KeyPair<felt252, felt252>,
43+
KeyPair<felt252, felt252>,
44+
) {
45+
let contract_address = init_contract_with_roles();
46+
47+
let secret_key_a = 1;
48+
let key_pair_a = KeyPairTrait::from_secret_key(secret_key_a);
49+
let public_key_a = key_pair_a.public_key;
50+
let user_a = declare_and_deploy("SRC9AccountMock", array![public_key_a]);
51+
52+
let secret_key_b = 1;
53+
let key_pair_b = KeyPairTrait::from_secret_key(secret_key_b);
54+
let public_key_b = key_pair_b.public_key;
55+
let user_b = declare_and_deploy("SRC9AccountMock", array![public_key_b]);
56+
57+
let token_a = Token::STRK.contract_address();
58+
let token_b = Token::ETH.contract_address();
59+
60+
set_balance(user_a, 10_000, Token::STRK);
61+
set_balance(user_b, 10_000, Token::ETH);
62+
63+
(contract_address, token_a, token_b, user_a, user_b, key_pair_a, key_pair_b)
64+
}

0 commit comments

Comments
 (0)