@@ -158,7 +158,9 @@ fn create_usdc<'a>(
158158 client. pause ( & admin) ;
159159 assert ! ( client. is_paused( ) ) ;
160160
161- let result = std:: panic:: catch_unwind ( std:: panic:: AssertUnwindSafe ( || client. distribute ( & admin, & developer, & 100 ) ) ) ;
161+ let result = std:: panic:: catch_unwind ( std:: panic:: AssertUnwindSafe ( || {
162+ client. distribute ( & admin, & developer, & 100 )
163+ } ) ) ;
162164 assert ! ( result. is_err( ) ) ;
163165 }
164166
@@ -2121,7 +2123,7 @@ fn chunk_iter_preserves_order_and_amounts() {
21212123 let env = Env :: default ( ) ;
21222124 let payments = make_payments ( & env, 7 ) ; // amounts 1..=7
21232125 let chunks = crate :: chunk_iter ( & env, payments, 3 ) ; // [3, 3, 1]
2124- // Flatten and assert amounts return in order 1,2,3,4,5,6,7.
2126+ // Flatten and assert amounts return in order 1,2,3,4,5,6,7.
21252127 let mut expected: i128 = 1 ;
21262128 for chunk in chunks. iter ( ) {
21272129 for ( _, amount) in chunk. iter ( ) {
@@ -2506,3 +2508,77 @@ fn batch_distribute_duplicate_detected_before_balance_check() {
25062508
25072509 client. batch_distribute ( & admin, & payments) ;
25082510}
2511+
2512+ #[ test]
2513+ fn deposit_yield_transfers_from_treasury_and_updates_metric ( ) {
2514+ let env = Env :: default ( ) ;
2515+ env. mock_all_auths ( ) ;
2516+ let admin = Address :: generate ( & env) ;
2517+ let ( pool_addr, client) = create_pool ( & env) ;
2518+ let ( usdc_address, usdc_client, usdc_admin) = create_usdc ( & env, & admin) ;
2519+ let source = Symbol :: new ( & env, "fees" ) ;
2520+
2521+ client. init ( & admin, & usdc_address) ;
2522+ usdc_admin. mint ( & admin, & 1_000 ) ;
2523+
2524+ client. deposit_yield ( & admin, & 400 , & source) ;
2525+
2526+ assert_eq ! ( usdc_client. balance( & admin) , 600 ) ;
2527+ assert_eq ! ( usdc_client. balance( & pool_addr) , 400 ) ;
2528+ assert_eq ! ( client. get_cumulative_yield_deposited( ) , 400 ) ;
2529+
2530+ let events = env. events ( ) . all ( ) ;
2531+ let deposit_event = events. last ( ) . unwrap ( ) ;
2532+ let event_name = Symbol :: try_from_val ( & env, & deposit_event. 1 . get ( 0 ) . unwrap ( ) ) . unwrap ( ) ;
2533+ assert_eq ! ( event_name, Symbol :: new( & env, "yield_deposited" ) ) ;
2534+
2535+ let data: ( i128 , Symbol , i128 ) =
2536+ <( i128 , Symbol , i128 ) >:: try_from_val ( & env, & deposit_event. 2 ) . unwrap ( ) ;
2537+ assert_eq ! ( data, ( 400 , source, 400 ) ) ;
2538+ }
2539+
2540+ #[ test]
2541+ fn deposit_yield_accumulates_multiple_sources ( ) {
2542+ let env = Env :: default ( ) ;
2543+ env. mock_all_auths ( ) ;
2544+ let admin = Address :: generate ( & env) ;
2545+ let ( pool_addr, client) = create_pool ( & env) ;
2546+ let ( usdc_address, usdc_client, usdc_admin) = create_usdc ( & env, & admin) ;
2547+
2548+ client. init ( & admin, & usdc_address) ;
2549+ usdc_admin. mint ( & admin, & 1_000 ) ;
2550+
2551+ client. deposit_yield ( & admin, & 250 , & Symbol :: new ( & env, "fees" ) ) ;
2552+ client. deposit_yield ( & admin, & 150 , & Symbol :: new ( & env, "yield" ) ) ;
2553+
2554+ assert_eq ! ( client. get_cumulative_yield_deposited( ) , 400 ) ;
2555+ assert_eq ! ( usdc_client. balance( & pool_addr) , 400 ) ;
2556+ assert_eq ! ( usdc_client. balance( & admin) , 600 ) ;
2557+ }
2558+
2559+ #[ test]
2560+ #[ should_panic( expected = "unauthorized: caller is not admin" ) ]
2561+ fn deposit_yield_rejects_non_treasury ( ) {
2562+ let env = Env :: default ( ) ;
2563+ env. mock_all_auths ( ) ;
2564+ let admin = Address :: generate ( & env) ;
2565+ let attacker = Address :: generate ( & env) ;
2566+ let ( _, client) = create_pool ( & env) ;
2567+ let ( usdc_address, _, _) = create_usdc ( & env, & admin) ;
2568+
2569+ client. init ( & admin, & usdc_address) ;
2570+ client. deposit_yield ( & attacker, & 100 , & Symbol :: new ( & env, "fees" ) ) ;
2571+ }
2572+
2573+ #[ test]
2574+ #[ should_panic( expected = "amount must be positive" ) ]
2575+ fn deposit_yield_rejects_zero_amount ( ) {
2576+ let env = Env :: default ( ) ;
2577+ env. mock_all_auths ( ) ;
2578+ let admin = Address :: generate ( & env) ;
2579+ let ( _, client) = create_pool ( & env) ;
2580+ let ( usdc_address, _, _) = create_usdc ( & env, & admin) ;
2581+
2582+ client. init ( & admin, & usdc_address) ;
2583+ client. deposit_yield ( & admin, & 0 , & Symbol :: new ( & env, "fees" ) ) ;
2584+ }
0 commit comments