@@ -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}
0 commit comments