@@ -1177,6 +1177,49 @@ fn test_top_up_immediately_after_creation() {
11771177 assert_eq ! ( stream. amount_per_second, expected_rate) ;
11781178}
11791179
1180+ #[ test]
1181+ fn test_top_up_before_start_time_updates_deposit_and_rate ( ) {
1182+ let t = TestEnv :: setup ( ) ;
1183+ let now = 1_000_000u64 ;
1184+ t. set_time ( now) ;
1185+ let client = t. client ( ) ;
1186+
1187+ let params = CreateStreamParams {
1188+ recipient : t. recipient . clone ( ) ,
1189+ token : t. token_id . clone ( ) ,
1190+ total_amount : 1_000_0000000 ,
1191+ start_time : now + 500 ,
1192+ end_time : now + 1500 ,
1193+ cliff_time : now + 500 ,
1194+ cliff_amount : 0 ,
1195+ } ;
1196+ let total = params. total_amount ;
1197+
1198+ t. token ( ) . approve (
1199+ & t. sender ,
1200+ & t. contract_id ,
1201+ & total,
1202+ & ( t. env . ledger ( ) . sequence ( ) + 500 ) ,
1203+ ) ;
1204+ let stream_id = client. create_stream ( & t. sender , & params) ;
1205+
1206+ let additional = 250_0000000i128 ;
1207+ t. token ( ) . approve (
1208+ & t. sender ,
1209+ & t. contract_id ,
1210+ & additional,
1211+ & ( t. env . ledger ( ) . sequence ( ) + 500 ) ,
1212+ ) ;
1213+ client. top_up ( & stream_id, & additional) ;
1214+
1215+ let stream = client. get_stream ( & stream_id) ;
1216+ assert_eq ! ( stream. deposited_amount, total + additional) ;
1217+ assert_eq ! ( stream. start_time, params. start_time) ;
1218+ assert_eq ! ( stream. end_time, params. end_time) ;
1219+ assert_eq ! ( stream. linear_amount, total + additional) ;
1220+ assert_eq ! ( stream. amount_per_second, ( total + additional) / 1000i128 ) ;
1221+ }
1222+
11801223#[ test]
11811224fn test_top_up_at_cliff_time ( ) {
11821225 let t = TestEnv :: setup ( ) ;
@@ -1525,6 +1568,32 @@ fn test_get_delegate_none_when_never_set() {
15251568 assert_eq ! ( client. get_delegate( & stream_id) , None ) ;
15261569}
15271570
1571+ #[ test]
1572+ fn test_remove_delegate_is_safe_noop_when_never_set ( ) {
1573+ let t = TestEnv :: setup ( ) ;
1574+ let now = 1_000_000u64 ;
1575+ t. set_time ( now) ;
1576+ let client = t. client ( ) ;
1577+ let params = t. default_params ( now) ;
1578+ let total = params. total_amount ;
1579+
1580+ t. token ( ) . approve (
1581+ & t. sender ,
1582+ & t. contract_id ,
1583+ & total,
1584+ & ( t. env . ledger ( ) . sequence ( ) + 500 ) ,
1585+ ) ;
1586+ let stream_id = client. create_stream ( & t. sender , & params) ;
1587+
1588+ assert_eq ! ( client. get_delegate( & stream_id) , None ) ;
1589+
1590+ let result = std:: panic:: catch_unwind ( std:: panic:: AssertUnwindSafe ( || {
1591+ client. remove_delegate ( & stream_id) ;
1592+ } ) ) ;
1593+ assert ! ( result. is_ok( ) , "remove_delegate should be a safe no-op" ) ;
1594+ assert_eq ! ( client. get_delegate( & stream_id) , None ) ;
1595+ }
1596+
15281597#[ test]
15291598fn test_delegate_can_withdraw ( ) {
15301599 let t = TestEnv :: setup ( ) ;
0 commit comments