|
1 | 1 | #![cfg(test)] |
2 | 2 |
|
3 | 3 | use super::*; |
| 4 | +use soroban_sdk::{ |
| 5 | + testutils::{Address as _, Ledger}, |
| 6 | + token, Address, Env, |
| 7 | +}; |
4 | 8 | use soroban_sdk::{ testutils::{ Address as _, Ledger }, token, Address, Env }; |
5 | 9 | use soroban_sdk::testutils::{Address as _, Events as _, Ledger}; |
6 | 10 | use soroban_sdk::{token, Address, Env, Event}; |
@@ -157,6 +161,7 @@ fn test_top_up() { |
157 | 161 | } |
158 | 162 |
|
159 | 163 | #[test] |
| 164 | +fn test_cliff_based_access_no_threshold() { |
160 | 165 | #[should_panic(expected = "cannot cancel stream: minimum duration not met")] |
161 | 166 | fn test_cancel_before_minimum_duration() { |
162 | 167 |
|
@@ -188,6 +193,12 @@ fn test_group_subscribe_and_collect_split() { |
188 | 193 | let contract_id = env.register(SubStreamContract, ()); |
189 | 194 | let client = SubStreamContractClient::new(&env, &contract_id); |
190 | 195 |
|
| 196 | + assert!(client.has_unlocked_access(&subscriber, &creator)); |
| 197 | + assert_eq!(client.get_access_tier(&subscriber, &creator), 2); |
| 198 | +} |
| 199 | + |
| 200 | +#[test] |
| 201 | +fn test_cliff_based_access_before_threshold() { |
191 | 202 | // Subscribe at timestamp 100 |
192 | 203 | env.ledger().set_timestamp(100); |
193 | 204 | client.subscribe(&subscriber, &creator, &token.address, &100, &1); |
@@ -275,6 +286,22 @@ fn test_group_cancel_collects_and_refunds_remaining_balance() { |
275 | 286 | let contract_id = env.register(SubStreamContract, ()); |
276 | 287 | let client = SubStreamContractClient::new(&env, &contract_id); |
277 | 288 |
|
| 289 | + client.set_cliff_threshold(&creator, &50); |
| 290 | + assert_eq!(client.get_cliff_threshold(&creator), 50); |
| 291 | + |
| 292 | + assert!(!client.has_unlocked_access(&subscriber, &creator)); |
| 293 | + assert_eq!(client.get_access_tier(&subscriber, &creator), 0); |
| 294 | + |
| 295 | + client.subscribe(&subscriber, &creator, &token.address, &30, &1); |
| 296 | + env.ledger().set_timestamp(100); |
| 297 | + client.collect(&subscriber, &creator); |
| 298 | + |
| 299 | + assert!(!client.has_unlocked_access(&subscriber, &creator)); |
| 300 | + assert_eq!(client.get_access_tier(&subscriber, &creator), 0); |
| 301 | +} |
| 302 | + |
| 303 | +#[test] |
| 304 | +fn test_cliff_based_access_after_threshold() { |
278 | 305 | // Subscribe at timestamp 100 |
279 | 306 | env.ledger().set_timestamp(100); |
280 | 307 | client.subscribe(&subscriber, &creator, &token.address, &100, &1); |
@@ -323,6 +350,22 @@ fn test_migrate_tier_upgrade_with_additional_deposit() { |
323 | 350 | let contract_id = env.register(SubStreamContract, ()); |
324 | 351 | let client = SubStreamContractClient::new(&env, &contract_id); |
325 | 352 |
|
| 353 | + client.set_cliff_threshold(&creator, &50); |
| 354 | + |
| 355 | + client.subscribe(&subscriber, &creator, &token.address, &100, &1); |
| 356 | + |
| 357 | + assert!(!client.has_unlocked_access(&subscriber, &creator)); |
| 358 | + |
| 359 | + env.ledger().set_timestamp(100); |
| 360 | + client.collect(&subscriber, &creator); |
| 361 | + |
| 362 | + assert!(client.has_unlocked_access(&subscriber, &creator)); |
| 363 | + assert_eq!(client.get_total_streamed(&subscriber, &creator), 100); |
| 364 | + assert_eq!(client.get_access_tier(&subscriber, &creator), 1); |
| 365 | +} |
| 366 | + |
| 367 | +#[test] |
| 368 | +fn test_access_tiers() { |
326 | 369 | env.ledger().set_timestamp(100); |
327 | 370 | client.subscribe(&subscriber, &creator, &token.address, &100, &1); |
328 | 371 |
|
@@ -385,11 +428,39 @@ fn test_group_requires_exactly_five_creators() { |
385 | 428 |
|
386 | 429 | let token = create_token_contract(&env, &admin); |
387 | 430 | let token_admin = token::StellarAssetClient::new(&env, &token.address); |
| 431 | + token_admin.mint(&subscriber, &10000); |
388 | 432 | token_admin.mint(&subscriber, &1000); |
389 | 433 |
|
390 | 434 | let contract_id = env.register(SubStreamContract, ()); |
391 | 435 | let client = SubStreamContractClient::new(&env, &contract_id); |
392 | 436 |
|
| 437 | + client.set_cliff_threshold(&creator, &50); |
| 438 | + |
| 439 | + client.subscribe(&subscriber, &creator, &token.address, &60, &2); |
| 440 | + |
| 441 | + env.ledger().set_timestamp(100); |
| 442 | + client.collect(&subscriber, &creator); |
| 443 | + |
| 444 | + assert_eq!(client.get_access_tier(&subscriber, &creator), 1); |
| 445 | + assert!(client.has_unlocked_access(&subscriber, &creator)); |
| 446 | + |
| 447 | + client.top_up(&subscriber, &creator, &200); |
| 448 | + env.ledger().set_timestamp(200); |
| 449 | + client.collect(&subscriber, &creator); |
| 450 | + |
| 451 | + assert_eq!(client.get_access_tier(&subscriber, &creator), 2); |
| 452 | + assert!(client.has_unlocked_access(&subscriber, &creator)); |
| 453 | + |
| 454 | + client.top_up(&subscriber, &creator, &300); |
| 455 | + env.ledger().set_timestamp(400); |
| 456 | + client.collect(&subscriber, &creator); |
| 457 | + |
| 458 | + assert_eq!(client.get_access_tier(&subscriber, &creator), 3); |
| 459 | + assert!(client.has_unlocked_access(&subscriber, &creator)); |
| 460 | +} |
| 461 | + |
| 462 | +#[test] |
| 463 | +fn test_total_streamed_tracking() { |
393 | 464 | // Subscribe at timestamp 100 |
394 | 465 | env.ledger().set_timestamp(100); |
395 | 466 | client.subscribe(&subscriber, &creator, &token.address, &100, &1); |
@@ -485,6 +556,16 @@ fn test_group_percentages_must_sum_to_100() { |
485 | 556 | let contract_id = env.register(SubStreamContract, ()); |
486 | 557 | let client = SubStreamContractClient::new(&env, &contract_id); |
487 | 558 |
|
| 559 | + client.subscribe(&subscriber, &creator, &token.address, &100, &1); |
| 560 | + |
| 561 | + env.ledger().set_timestamp(100); |
| 562 | + client.collect(&subscriber, &creator); |
| 563 | + assert_eq!(client.get_total_streamed(&subscriber, &creator), 100); |
| 564 | + |
| 565 | + client.top_up(&subscriber, &creator, &50); |
| 566 | + env.ledger().set_timestamp(150); |
| 567 | + client.collect(&subscriber, &creator); |
| 568 | + assert_eq!(client.get_total_streamed(&subscriber, &creator), 150); |
488 | 569 | // Subscribe at timestamp 100 |
489 | 570 | env.ledger().set_timestamp(100); |
490 | 571 | client.subscribe(&subscriber, &creator, &token.address, &100, &1); |
|
0 commit comments