Skip to content

Commit 4ff9ab6

Browse files
Merge pull request #214 from Vvictor-commits/test/settlement-global-pool-timestamp
test(settlement): global pool timestamp updates
2 parents ae229e4 + f5f3537 commit 4ff9ab6

File tree

3 files changed

+64
-10
lines changed

3 files changed

+64
-10
lines changed

contracts/settlement/src/test.rs

Lines changed: 59 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ mod settlement_tests {
317317
assert_eq!(client.get_vault(), new_vault);
318318
}
319319

320-
// ── admin rotation edge cases ────────────────────────────────────────────
320+
// ── admin rotation edge cases ────────────────────────────────────────────
321321

322322
#[test]
323323
fn test_set_admin_to_same_address_succeeds() {
@@ -463,7 +463,7 @@ mod settlement_tests {
463463
);
464464
}
465465

466-
// ── event emission tests ────────────────────────────────────────────────
466+
// ── event emission tests ────────────────────────────────────────────────
467467

468468
#[test]
469469
fn test_set_admin_emits_nomination_event() {
@@ -532,7 +532,7 @@ mod settlement_tests {
532532
assert_eq!(topic_new, new_admin);
533533
}
534534

535-
// ── panic / error paths ──────────────────────────────────────────────────
535+
// ── panic / error paths ──────────────────────────────────────────────────
536536

537537
#[test]
538538
#[should_panic(expected = "settlement contract already initialized")]
@@ -654,7 +654,7 @@ mod settlement_tests {
654654
}
655655
}
656656

657-
// ── event shape tests ────────────────────────────────────────────────────
657+
// ── event shape tests ────────────────────────────────────────────────────
658658

659659
#[test]
660660
fn test_payment_received_event_to_pool() {
@@ -777,7 +777,7 @@ mod settlement_tests {
777777
assert_eq!(bc_data.new_balance, 500i128);
778778
}
779779

780-
// ── regression tests: ensure settlement logic intact after rotation ─────
780+
// ── regression tests: ensure settlement logic intact after rotation ─────
781781

782782
#[test]
783783
fn test_receive_payment_works_after_admin_rotation() {
@@ -913,4 +913,58 @@ mod settlement_tests {
913913
assert_eq!(pool_after.last_updated, 1_700_000_100);
914914
assert_eq!(pool_after.total_balance, 1500i128);
915915
}
916+
917+
/// `last_updated` reflects the ledger timestamp at the moment of each pool credit.
918+
#[test]
919+
fn test_global_pool_last_updated_on_receive_payment() {
920+
let env = Env::default();
921+
env.mock_all_auths();
922+
923+
let admin = Address::generate(&env);
924+
let vault = Address::generate(&env);
925+
let addr = env.register(CalloraSettlement, ());
926+
let client = CalloraSettlementClient::new(&env, &addr);
927+
928+
env.ledger().set_timestamp(1_000);
929+
client.init(&admin, &vault);
930+
assert_eq!(client.get_global_pool().last_updated, 1_000);
931+
932+
// Advance time and credit pool � last_updated must change
933+
env.ledger().set_timestamp(2_000);
934+
client.receive_payment(&vault, &100i128, &true, &None);
935+
let pool = client.get_global_pool();
936+
assert_eq!(pool.last_updated, 2_000);
937+
assert_eq!(pool.total_balance, 100i128);
938+
939+
// Advance again � each credit stamps the new time
940+
env.ledger().set_timestamp(3_000);
941+
client.receive_payment(&vault, &50i128, &true, &None);
942+
let pool2 = client.get_global_pool();
943+
assert_eq!(pool2.last_updated, 3_000);
944+
assert_eq!(pool2.total_balance, 150i128);
945+
}
946+
947+
/// Routing to a developer does NOT update `last_updated` on the global pool.
948+
#[test]
949+
fn test_global_pool_last_updated_unchanged_for_developer_payment() {
950+
let env = Env::default();
951+
env.mock_all_auths();
952+
953+
let admin = Address::generate(&env);
954+
let vault = Address::generate(&env);
955+
let developer = Address::generate(&env);
956+
let addr = env.register(CalloraSettlement, ());
957+
let client = CalloraSettlementClient::new(&env, &addr);
958+
959+
env.ledger().set_timestamp(1_000);
960+
client.init(&admin, &vault);
961+
962+
env.ledger().set_timestamp(5_000);
963+
client.receive_payment(&vault, &200i128, &false, &Some(developer.clone()));
964+
965+
// Pool timestamp must still be the init timestamp
966+
assert_eq!(client.get_global_pool().last_updated, 1_000);
967+
assert_eq!(client.get_global_pool().total_balance, 0);
968+
assert_eq!(client.get_developer_balance(&developer), 200i128);
969+
}
916970
}

contracts/vault/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -606,4 +606,4 @@ impl CalloraVault {
606606
mod test;
607607

608608
#[cfg(test)]
609-
mod test_init_hardening;
609+
mod test_init_hardening;

contracts/vault/src/test.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,7 @@ fn set_allowed_depositor_duplicate_is_ignored() {
424424
client.init(&owner, &usdc, &Some(100), &None, &None, &None, &None);
425425

426426
client.set_allowed_depositor(&owner, &Some(depositor.clone()));
427-
client.set_allowed_depositor(&owner, &Some(depositor.clone())); // duplicate should be a no-op
427+
client.set_allowed_depositor(&owner, &Some(depositor.clone())); // duplicate — should be a no-op
428428

429429
// depositor can still deposit exactly once (list not doubled)
430430
usdc_admin.mint(&depositor, &50);
@@ -920,7 +920,7 @@ fn batch_deduct_too_large_fails() {
920920

921921
#[test]
922922
fn batch_deduct_fail_mid_batch_leaves_balance_unchanged() {
923-
// Second item exceeds balance entire batch must revert.
923+
// Second item exceeds balance — entire batch must revert.
924924
let env = Env::default();
925925
let owner = Address::generate(&env);
926926
let (vault_address, client) = create_vault(&env);
@@ -1996,7 +1996,7 @@ fn test_deduct_with_settlement_success() {
19961996
}
19971997

19981998
// ---------------------------------------------------------------------------
1999-
// Checked arithmetic overflow / underflow boundary tests
1999+
// Checked arithmetic — overflow / underflow boundary tests
20002000
// ---------------------------------------------------------------------------
20012001

20022002
#[test]
@@ -2067,7 +2067,7 @@ fn withdraw_to_zero_succeeds() {
20672067
}
20682068

20692069
// ---------------------------------------------------------------------------
2070-
// Issue #108 set_allowed_depositor: duplicate add, clear, unauthorized
2070+
// Issue #108 — set_allowed_depositor: duplicate add, clear, unauthorized
20712071
// ---------------------------------------------------------------------------
20722072

20732073
#[test]

0 commit comments

Comments
 (0)