Skip to content

Commit

Permalink
Merge pull request #3709 from anoma/tiago/test-token-transfer
Browse files Browse the repository at this point in the history
Add test coverage on token transfer struct
  • Loading branch information
mergify[bot] committed Aug 27, 2024
2 parents aefa330 + 9cbb3aa commit 693b463
Showing 1 changed file with 133 additions and 3 deletions.
136 changes: 133 additions & 3 deletions crates/token/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -180,9 +180,9 @@ impl Transfer {
}

/// Set the key to the given amount
fn set<K: Ord>(
map: &mut BTreeMap<K, DenominatedAmount>,
key: K,
fn set(
map: &mut BTreeMap<Account, DenominatedAmount>,
key: Account,
val: DenominatedAmount,
) {
if val.is_zero() {
Expand Down Expand Up @@ -313,3 +313,133 @@ pub mod testing {
})
}
}

#[cfg(test)]
mod test_token_transfer_actions {
use namada_core::address::testing::{established_address_1, nam};

use super::*;

#[test]
fn test_set_to_zero() {
let account = Account {
owner: established_address_1(),
token: nam(),
};

let mut transfer = Transfer::default();

let zero = Amount::zero().native_denominated();
Transfer::set(&mut transfer.sources, account.clone(), zero);
assert_eq!(transfer, Transfer::default());

let one = Amount::from(1).native_denominated();
Transfer::set(&mut transfer.sources, account.clone(), one);
assert_eq!(
transfer,
Transfer {
sources: BTreeMap::from([(account, one)]),
..Transfer::default()
}
);
}

#[test]
fn test_debit_credit() {
// test debit
test_debit_credit_aux(
Transfer::debit,
Transfer::credit,
|sources| Transfer {
sources,
..Transfer::default()
},
|targets| Transfer {
targets,
..Transfer::default()
},
);

// test credit
test_debit_credit_aux(
Transfer::credit,
Transfer::debit,
|targets| Transfer {
targets,
..Transfer::default()
},
|sources| Transfer {
sources,
..Transfer::default()
},
);
}

fn test_debit_credit_aux(
op1: fn(
Transfer,
Address,
Address,
DenominatedAmount,
) -> Option<Transfer>,
op2: fn(
Transfer,
Address,
Address,
DenominatedAmount,
) -> Option<Transfer>,
transfer1: fn(BTreeMap<Account, DenominatedAmount>) -> Transfer,
transfer2: fn(BTreeMap<Account, DenominatedAmount>) -> Transfer,
) {
let account = Account {
owner: established_address_1(),
token: nam(),
};

let amount_100 = Amount::native_whole(100).native_denominated();
let amount_90 = Amount::native_whole(90).native_denominated();
let amount_80 = Amount::native_whole(80).native_denominated();
let amount_10 = Amount::native_whole(10).native_denominated();

let transfer = Transfer::default();

let transfer = op1(
transfer,
account.owner.clone(),
account.token.clone(),
amount_10,
)
.unwrap();

assert_eq!(
transfer,
transfer1(BTreeMap::from([(account.clone(), amount_10)])),
);

let transfer = op2(
transfer,
account.owner.clone(),
account.token.clone(),
amount_100,
)
.unwrap();

assert_eq!(
transfer,
transfer2(BTreeMap::from([(account.clone(), amount_90)])),
);

let transfer = op1(
transfer,
account.owner.clone(),
account.token.clone(),
amount_10,
)
.unwrap();

assert_eq!(
transfer,
transfer2(BTreeMap::from([(account.clone(), amount_80)])),
);
}
}

0 comments on commit 693b463

Please sign in to comment.