Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions contracts/splitter/src/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1898,3 +1898,58 @@ fn single_recipient_gets_full_amount() {
assert_eq!(token_client.balance(&a), amount);
assert_eq!(token_client.balance(&payer), 0);
}

#[test]
fn grandchild_credit_through_two_levels_of_nesting() {
let s = setup();
let creator = Address::generate(&s.env);
let leaf_a = Address::generate(&s.env);
let leaf_b = Address::generate(&s.env);
let leaf_c = Address::generate(&s.env);
let payer = Address::generate(&s.env);
let (token_id, token_client) = fund_token(&s.env, &payer, 10_000);

// Level 2 (grandchild)
let grandchild = s.client.create_split(
&creator,
&vec![&s.env, acct(&leaf_a), acct(&leaf_b)],
&vec![&s.env, 5_000, 5_000],
&None,
);

// Level 1 (child)
let child = s.client.create_split(
&creator,
&vec![&s.env, acct(&leaf_c), Recipient::Split(grandchild)],
&vec![&s.env, 4_000, 6_000],
&None,
);

// Level 0 (parent)
let parent = s.client.create_split(
&creator,
&vec![&s.env, Recipient::Split(child)],
&vec![&s.env, 10_000],
&None,
);

s.client.deposit(&payer, &parent, &token_id, &1_000);

// Distribute with depth=2 (parent, child, grandchild)
let amount = s.client.distribute_cascade(&parent, &token_id, &2);
assert_eq!(amount, 1_000);

// Parent gets 1_000, 100% goes to child.
// Child gets 1_000, 40% (400) goes to leaf_c, 60% (600) goes to grandchild.
// Grandchild gets 600, 50% (300) goes to leaf_a, 50% (300) goes to leaf_b.

assert_eq!(token_client.balance(&leaf_c), 400);
assert_eq!(token_client.balance(&leaf_a), 300);
assert_eq!(token_client.balance(&leaf_b), 300);

// Balances in contract should be 0
assert_eq!(s.client.balance(&parent, &token_id), 0);
assert_eq!(s.client.balance(&child, &token_id), 0);
assert_eq!(s.client.balance(&grandchild, &token_id), 0);
assert_eq!(token_client.balance(&s.client.address), 0);
}
Loading