Skip to content

Commit a1f674f

Browse files
committed
test(#502): add regression test for TTL extended on creator state after sell
1 parent 8d64faf commit a1f674f

1 file changed

Lines changed: 41 additions & 0 deletions

File tree

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
//! Regression test: TTL must be extended after sell, not only after buy.
2+
3+
mod contract_test_env;
4+
use contract_test_env::{
5+
register_creator_keys, register_test_creator, test_env_with_auths,
6+
set_key_price_for_tests, set_protocol_fee_bps, compute_expected_buy_price,
7+
};
8+
use soroban_sdk::{testutils::Address as _, Address};
9+
10+
#[test]
11+
fn ttl_extended_after_sell() {
12+
let env = test_env_with_auths();
13+
let (client, _) = register_creator_keys(&env);
14+
set_key_price_for_tests(&env, &client, 100i128);
15+
set_protocol_fee_bps(&env, &client, 9000u32, 1000u32);
16+
let creator = register_test_creator(&env, &client);
17+
let buyer = Address::generate(&env);
18+
19+
// Buy a key to establish initial state
20+
let buy_price = compute_expected_buy_price(0, 100i128);
21+
client.buy_key(&creator, &buyer, &buy_price, &None);
22+
23+
// Record TTL after buy
24+
let ttl_after_buy = client.get_creator_ttl_remaining(&creator);
25+
assert!(ttl_after_buy > 0, "TTL must be positive after buy");
26+
27+
// Advance ledger to consume some TTL
28+
env.ledger().with_mut(|li| { li.sequence_number += 1000; });
29+
30+
// Sell the key
31+
let sell_proceeds = client.get_sell_quote(&creator, &1i128);
32+
client.sell_key(&creator, &buyer, &1i128, &sell_proceeds);
33+
34+
// TTL must be extended after sell
35+
let ttl_after_sell = client.get_creator_ttl_remaining(&creator);
36+
assert!(
37+
ttl_after_sell > ttl_after_buy - 1000,
38+
"TTL must be extended after sell: ttl_after_sell={} ttl_after_buy={}",
39+
ttl_after_sell, ttl_after_buy
40+
);
41+
}

0 commit comments

Comments
 (0)