@@ -10,6 +10,7 @@ use mars_types::{
10
10
use super :: helpers:: {
11
11
assert_err, uosmo_info, AccountToFund , CoinInfo , MockEnv , DEFAULT_RED_BANK_COIN_BALANCE ,
12
12
} ;
13
+ use crate :: tests:: helpers:: { get_coin, get_debt, uatom_info} ;
13
14
14
15
#[ test]
15
16
fn only_token_owner_can_repay ( ) {
@@ -389,3 +390,55 @@ fn amount_none_repays_total_debt() {
389
390
let coin = mock. query_balance ( & Addr :: unchecked ( config. red_bank ) , & coin_info. denom ) ;
390
391
assert_eq ! ( coin. amount, DEFAULT_RED_BANK_COIN_BALANCE . add( Uint128 :: new( 1 ) ) ) ;
391
392
}
393
+
394
+ #[ test]
395
+ fn amount_none_repays_no_more_than_available_asset ( ) {
396
+ let uosmo_info = uosmo_info ( ) ;
397
+ let uatom_info = uatom_info ( ) ;
398
+
399
+ let user = Addr :: unchecked ( "user" ) ;
400
+
401
+ let mut mock = MockEnv :: new ( )
402
+ . set_params ( & [ uosmo_info. clone ( ) , uatom_info. clone ( ) ] )
403
+ . fund_account ( AccountToFund {
404
+ addr : user. clone ( ) ,
405
+ funds : coins ( 300 , uatom_info. denom . clone ( ) ) ,
406
+ } )
407
+ . build ( )
408
+ . unwrap ( ) ;
409
+
410
+ let account_id = mock. create_credit_account ( & user) . unwrap ( ) ;
411
+
412
+ mock. update_credit_account (
413
+ & account_id,
414
+ & user,
415
+ vec ! [
416
+ Deposit ( uatom_info. to_coin( 300 ) ) ,
417
+ Borrow ( uosmo_info. to_coin( 50 ) ) ,
418
+ Withdraw ( uosmo_info. to_action_coin( 10 ) ) ,
419
+ Repay {
420
+ recipient_account_id: None ,
421
+ coin: uosmo_info. to_action_coin_full_balance( ) ,
422
+ } ,
423
+ ] ,
424
+ & [ uatom_info. to_coin ( 300 ) ] ,
425
+ )
426
+ . unwrap ( ) ;
427
+
428
+ let position = mock. query_positions ( & account_id) ;
429
+ assert_eq ! ( position. debts. len( ) , 1 ) ;
430
+ let uosmo_debt = get_debt ( & uosmo_info. denom , & position. debts ) ;
431
+ // debt: 50 uosmo,
432
+ // account balance: 40 uosmo (50 borrowed - 10 withdrawn)
433
+ // repaying full balance should repay 40 uosmo
434
+ assert_eq ! ( uosmo_debt. amount, Uint128 :: new( 11 ) ) ; // 10 + 1 interest
435
+
436
+ assert_eq ! ( position. deposits. len( ) , 1 ) ;
437
+ assert_eq ! ( get_coin( & uatom_info. denom, & position. deposits) , uatom_info. to_coin( 300 ) ) ;
438
+
439
+ let coin = mock. query_balance ( & mock. rover , & uatom_info. denom ) ;
440
+ assert_eq ! ( coin. amount, Uint128 :: new( 300 ) ) ;
441
+
442
+ let coin = mock. query_balance ( & mock. rover , & uosmo_info. denom ) ;
443
+ assert_eq ! ( coin. amount, Uint128 :: zero( ) ) ;
444
+ }
0 commit comments