Skip to content

Commit

Permalink
rebase and implementation of remaining tests
Browse files Browse the repository at this point in the history
  • Loading branch information
chachaleo committed Sep 28, 2024
1 parent 7781b5c commit a5937ad
Show file tree
Hide file tree
Showing 4 changed files with 125 additions and 23 deletions.
1 change: 0 additions & 1 deletion contracts/.snfoundry_cache/.prev_tests_failed
Original file line number Diff line number Diff line change
@@ -1 +0,0 @@
zkramp::contracts::ramps::revolut::revolut_test::test_initiate_liquidity_withdraw_without_enough_liquidity
4 changes: 3 additions & 1 deletion contracts/src/components/registry/interface.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ use zkramp::utils::hash::HashSerializable;

#[derive(Drop, Copy, Serde, Debug, PartialEq, starknet::Store)]
pub enum OffchainId {
Revolut: felt252
#[default]
None,
Revolut: felt252,
}

#[starknet::interface]
Expand Down
133 changes: 114 additions & 19 deletions contracts/src/contracts/ramps/revolut/revolut_test.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ use snforge_std::{
stop_cheat_caller_address, test_address
};
use zkramp::contracts::ramps::revolut::interface::{ZKRampABIDispatcher, ZKRampABIDispatcherTrait, LiquidityKey};
use zkramp::contracts::ramps::revolut::revolut::RevolutRamp::{Event, LiquidityAdded, LiquidityLocked};
use zkramp::contracts::ramps::revolut::revolut::RevolutRamp::{
Event, LiquidityAdded, LiquidityLocked, LiquidityShareRequested
};
use zkramp::tests::constants;
use zkramp::tests::utils;

Expand Down Expand Up @@ -403,7 +405,7 @@ fn test_initiate_liquidity_withdraw_zero_amount() {
let liquidity_owner = constants::OTHER();
let liquidity_withdrawer = constants::CALLER();
let offchain_id = constants::REVOLUT_ID();
let offchain_id_withdrawer = constants::OTHER_REVOLUT_ID();
let offchain_id_withdrawer = constants::REVOLUT_ID2();
let amount = 42;
let liquidity_key = LiquidityKey { owner: liquidity_owner, offchain_id };

Expand Down Expand Up @@ -432,7 +434,7 @@ fn test_initiate_liquidity_withdraw_locked() {
let liquidity_owner = constants::OTHER();
let liquidity_withdrawer = constants::CALLER();
let offchain_id = constants::REVOLUT_ID();
let offchain_id_withdrawer = constants::OTHER_REVOLUT_ID();
let offchain_id_withdrawer = constants::REVOLUT_ID2();
let amount = 42;
let liquidity_key = LiquidityKey { owner: liquidity_owner, offchain_id };

Expand Down Expand Up @@ -464,7 +466,7 @@ fn test_initiate_liquidity_withdraw_with_unregistered_offchain_id() {
let liquidity_owner = constants::OTHER();
let liquidity_withdrawer = constants::CALLER();
let offchain_id = constants::REVOLUT_ID();
let offchain_id_withdrawer = constants::OTHER_REVOLUT_ID();
let offchain_id_withdrawer = constants::REVOLUT_ID2();
let amount = 42;
let liquidity_key = LiquidityKey { owner: liquidity_owner, offchain_id };

Expand All @@ -490,7 +492,7 @@ fn test_initiate_liquidity_withdraw_without_enough_liquidity() {
let liquidity_owner = constants::OTHER();
let liquidity_withdrawer = constants::CALLER();
let offchain_id = constants::REVOLUT_ID();
let offchain_id_withdrawer = constants::OTHER_REVOLUT_ID();
let offchain_id_withdrawer = constants::REVOLUT_ID2();
let amount1 = 42;
let amount2 = 75;
let liquidity_key = LiquidityKey { owner: liquidity_owner, offchain_id };
Expand All @@ -513,14 +515,16 @@ fn test_initiate_liquidity_withdraw_without_enough_liquidity() {
revolut_ramp.initiate_liquidity_withdrawal(:liquidity_key, amount: amount2, offchain_id: offchain_id_withdrawer);
}

// #[test]
// #[should_panic(expected: 'Not enough liquidity')]
#[test]
#[should_panic(expected: 'Not enough liquidity')]
fn test_initiate_liquidity_withdraw_without_enough_available_liquidity() {
let (revolut_ramp, erc20) = setup();
let liquidity_owner = constants::OTHER();
let liquidity_withdrawer = constants::CALLER();
let liquidity_withdrawer1 = constants::CALLER();
let liquidity_withdrawer2 = constants::SPENDER();
let offchain_id = constants::REVOLUT_ID();
let offchain_id_withdrawer = constants::OTHER_REVOLUT_ID();
let offchain_id_withdrawer1 = constants::REVOLUT_ID2();
let offchain_id_withdrawer2 = constants::REVOLUT_ID3();
let amount1 = 42;
let amount2 = 75;
let liquidity_key = LiquidityKey { owner: liquidity_owner, offchain_id };
Expand All @@ -535,26 +539,117 @@ fn test_initiate_liquidity_withdraw_without_enough_available_liquidity() {
// add liquidity
revolut_ramp.add_liquidity(amount: amount2, :offchain_id);

// register offchain ID withdrawer
start_cheat_caller_address(revolut_ramp.contract_address, liquidity_withdrawer);
revolut_ramp.register(offchain_id: offchain_id_withdrawer);
// register offchain ID withdrawer 1
start_cheat_caller_address(revolut_ramp.contract_address, liquidity_withdrawer1);
revolut_ramp.register(offchain_id: offchain_id_withdrawer1);

// initiate liquidity withdraw
revolut_ramp.initiate_liquidity_withdrawal(:liquidity_key, amount: amount1, offchain_id: offchain_id_withdrawer);
revolut_ramp.initiate_liquidity_withdrawal(:liquidity_key, amount: amount1, offchain_id: offchain_id_withdrawer1);

assert_eq!(revolut_ramp.available_liquidity(:liquidity_key), amount2 - amount1);
assert_eq!(revolut_ramp.all_liquidity(:liquidity_key), amount2);

// register offchain ID withdrawer 2
start_cheat_caller_address(revolut_ramp.contract_address, liquidity_withdrawer2);
revolut_ramp.register(offchain_id: offchain_id_withdrawer2);

// initiate liquidity withdraw
revolut_ramp.initiate_liquidity_withdrawal(:liquidity_key, amount: amount1, offchain_id: offchain_id_withdrawer);
revolut_ramp.initiate_liquidity_withdrawal(:liquidity_key, amount: amount1, offchain_id: offchain_id_withdrawer2);
}

// #[test]
#[test]
fn test_initiate_liquidity_withdraw() {
panic!("Not implemented yet");
let (revolut_ramp, erc20) = setup();
let mut spy = spy_events();
let liquidity_owner = constants::OTHER();
let liquidity_withdrawer = constants::CALLER();
let offchain_id = constants::REVOLUT_ID();
let offchain_id_withdrawer = constants::REVOLUT_ID2();
let amount = 42;
let liquidity_key = LiquidityKey { owner: liquidity_owner, offchain_id };

// fund the account
fund_and_approve(token: erc20, recipient: liquidity_owner, spender: revolut_ramp.contract_address, :amount);

// register offchain ID owner
start_cheat_caller_address(revolut_ramp.contract_address, liquidity_owner);
revolut_ramp.register(:offchain_id);

// add liquidity
revolut_ramp.add_liquidity(amount: amount, :offchain_id);

// assert state before
assert_eq!(revolut_ramp.all_liquidity(:liquidity_key), amount);
assert_eq!(revolut_ramp.available_liquidity(:liquidity_key), amount);
assert_eq!(erc20.balance_of(liquidity_owner), 0);

// register offchain ID withdrawer
start_cheat_caller_address(revolut_ramp.contract_address, liquidity_withdrawer);
revolut_ramp.register(offchain_id: offchain_id_withdrawer);

// initiate liquidity withdraw
revolut_ramp.initiate_liquidity_withdrawal(:liquidity_key, :amount, offchain_id: offchain_id_withdrawer);

// assert state after
assert_eq!(revolut_ramp.all_liquidity(liquidity_key), amount);
assert_eq!(revolut_ramp.available_liquidity(liquidity_key), 0);
assert_eq!(erc20.balance_of(liquidity_owner), 0);

// check on emitted events
spy
.assert_emitted(
@array![
(revolut_ramp.contract_address, Event::LiquidityAdded(LiquidityAdded { liquidity_key, amount })),
(
revolut_ramp.contract_address,
Event::LiquidityShareRequested(
LiquidityShareRequested {
requestor: liquidity_withdrawer,
amount,
liquidity_key,
offchain_id: offchain_id_withdrawer,
expiration_date: 3600
}
)
)
]
)
}

// #[test]
// #[should_panic(expected: 'This offchainID is busy')]
#[test]
#[should_panic(expected: 'This offchainID is busy')]
fn test_initiate_liquidity_withdraw_twice() {
panic!("Not implemented yet");
let (revolut_ramp, erc20) = setup();
let liquidity_owner = constants::OTHER();
let liquidity_withdrawer = constants::CALLER();
let offchain_id = constants::REVOLUT_ID();
let offchain_id_withdrawer = constants::REVOLUT_ID2();
let amount1 = 42;
let amount2 = 75;
let liquidity_key = LiquidityKey { owner: liquidity_owner, offchain_id };

// fund the account
fund_and_approve(token: erc20, recipient: liquidity_owner, spender: revolut_ramp.contract_address, amount: amount2);

// register offchain ID owner
start_cheat_caller_address(revolut_ramp.contract_address, liquidity_owner);
revolut_ramp.register(:offchain_id);

// add liquidity
revolut_ramp.add_liquidity(amount: amount2, :offchain_id);

// register offchain ID withdrawer
start_cheat_caller_address(revolut_ramp.contract_address, liquidity_withdrawer);
revolut_ramp.register(offchain_id: offchain_id_withdrawer);

// initiate liquidity withdraw
revolut_ramp.initiate_liquidity_withdrawal(:liquidity_key, amount: amount1, offchain_id: offchain_id_withdrawer);

assert_eq!(revolut_ramp.available_liquidity(:liquidity_key), amount2 - amount1);
assert_eq!(revolut_ramp.all_liquidity(:liquidity_key), amount2);

// initiate a second liquidity withdraw
revolut_ramp.initiate_liquidity_withdrawal(:liquidity_key, amount: amount1, offchain_id: offchain_id_withdrawer);
}

// #[test]
Expand Down
10 changes: 8 additions & 2 deletions contracts/src/tests/constants.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,22 @@ use zkramp::components::registry::interface::OffchainId;

const REVTAG: felt252 = 'just a random revtag hash';

const REVTAG2: felt252 = 'just another random revtag hash';
const REVTAG2: felt252 = 'just a 2nd random revtag hash';

const REVTAG3: felt252 = 'just a 3rd random revtag hash';

pub fn REVOLUT_ID() -> OffchainId {
OffchainId::Revolut(REVTAG)
}

pub fn OTHER_REVOLUT_ID() -> OffchainId {
pub fn REVOLUT_ID2() -> OffchainId {
OffchainId::Revolut(REVTAG2)
}

pub fn REVOLUT_ID3() -> OffchainId {
OffchainId::Revolut(REVTAG3)
}

pub fn CALLER() -> ContractAddress {
contract_address_const::<'caller'>()
}
Expand Down

0 comments on commit a5937ad

Please sign in to comment.