Skip to content

Commit d168b53

Browse files
EmmyrankySamuel-21-engthlpkee20-wq
authored
test: cover multi-offering payment-token independence (#866)
Co-authored-by: Samuel-21-eng <samuelikechukwu782@gmail.com> Co-authored-by: thlpkee20-wq <thlpkee20@gmail.com>
1 parent 84153bf commit d168b53

2 files changed

Lines changed: 75 additions & 1 deletion

File tree

src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,7 @@ mod test_tax_year;
414414
#[cfg(test)]
415415
mod test_transfer_cooldown;
416416
#[cfg(test)]
417-
mod test_dividend_accrual_ledger;
417+
mod test_multi_token_independence;
418418

419419
// ── Event symbols ────────────────────────────────────────────
420420
const EVENT_REVENUE_REPORTED: Symbol = symbol_short!("rev_rep");
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
extern crate alloc;
2+
3+
use super::*;
4+
use soroban_sdk::{
5+
symbol_short,
6+
testutils::{Address as _, Events as _},
7+
Address, Env,
8+
};
9+
10+
fn setup_test() -> (Env, RevoraRevenueShareClient<'static>, Address) {
11+
let env = Env::default();
12+
env.mock_all_auths();
13+
14+
let contract_id = env.register_contract(None, RevoraRevenueShare);
15+
let client = RevoraRevenueShareClient::new(&env, &contract_id);
16+
17+
let admin = Address::generate(&env);
18+
client.initialize(&admin, &None, &None);
19+
20+
(env, client, admin)
21+
}
22+
23+
fn register_offering(
24+
client: &RevoraRevenueShareClient<'static>,
25+
issuer: &Address,
26+
namespace: Symbol,
27+
token: &Address,
28+
) {
29+
let payout_asset = Address::generate(&client.env);
30+
client.register_offering(
31+
issuer,
32+
&namespace,
33+
token,
34+
&5000,
35+
&payout_asset,
36+
&0,
37+
&symbol_short!(""),
38+
&0,
39+
);
40+
}
41+
42+
#[test]
43+
fn test_multi_token_offering_independence() {
44+
let (env, client, issuer) = setup_test();
45+
let namespace = symbol_short!("ns");
46+
47+
let tokenA = Address::generate(&env);
48+
let tokenB = Address::generate(&env);
49+
50+
// Payment tokens
51+
let payTokenX = Address::generate(&env);
52+
let payTokenY = Address::generate(&env);
53+
54+
// Register Offerings
55+
register_offering(&client, &issuer, namespace, &tokenA);
56+
register_offering(&client, &issuer, namespace, &tokenB);
57+
58+
// Deposit tokenX to A
59+
let amountA = 1000;
60+
client.deposit_revenue(&issuer, &namespace, &tokenA, &payTokenX, &amountA, &1);
61+
62+
// Deposit tokenY to B
63+
let amountB = 2000;
64+
client.deposit_revenue(&issuer, &namespace, &tokenB, &payTokenY, &amountB, &1);
65+
66+
// Assert get_payment_token returns correct for each
67+
assert_eq!(client.get_payment_token(&issuer, &namespace, &tokenA), Some(payTokenX));
68+
assert_eq!(client.get_payment_token(&issuer, &namespace, &tokenB), Some(payTokenY));
69+
70+
// Assert cross-deposit fails (tokenY into A)
71+
let res = client.try_deposit_revenue(&issuer, &namespace, &tokenA, &payTokenY, &amountB, &2);
72+
assert!(res.is_err());
73+
assert_eq!(res.unwrap_err().unwrap(), RevoraError::PaymentTokenMismatch as u32);
74+
}

0 commit comments

Comments
 (0)