@@ -1046,7 +1046,6 @@ fn test_subscribe_fails_when_paused() {
10461046}
10471047
10481048#[ test]
1049- #[ should_panic( expected = "contract is paused" ) ]
10501049fn test_extend_subscription_fails_when_paused ( ) {
10511050 let ( env, client, admin, token, token_admin) = setup_test ( ) ;
10521051 let fee_recipient = Address :: generate ( & env) ;
@@ -1057,7 +1056,11 @@ fn test_extend_subscription_fails_when_paused() {
10571056 let plan_id = client. create_plan ( & creator, & token. address , & 1000 , & 30 ) ;
10581057 client. subscribe ( & fan, & plan_id, & token. address ) ;
10591058 client. pause ( ) ;
1060- client. extend_subscription ( & fan, & creator, & 17280 , & token. address ) ;
1059+ let result = client. try_extend_subscription ( & fan, & creator, & 17280 , & token. address ) ;
1060+ assert_eq ! (
1061+ result,
1062+ Err ( Ok ( SorobanError :: from_contract_error( Error :: Paused as u32 ) ) )
1063+ ) ;
10611064}
10621065
10631066#[ test]
@@ -1076,10 +1079,13 @@ fn test_cancel_fails_when_paused() {
10761079}
10771080
10781081#[ test]
1079- #[ should_panic]
10801082fn test_create_subscription_fails_when_paused ( ) {
10811083 let ( _env, client, _admin, creator, fan, _token, _token_admin) = setup_paused ( ) ;
1082- client. create_subscription ( & fan, & creator, & 518400 ) ;
1084+ let result = client. try_create_subscription ( & fan, & creator, & 518400 ) ;
1085+ assert_eq ! (
1086+ result,
1087+ Err ( Ok ( SorobanError :: from_contract_error( Error :: Paused as u32 ) ) )
1088+ ) ;
10831089}
10841090
10851091/// Views must remain available while paused.
@@ -1479,3 +1485,70 @@ fn test_ping_works_on_uninitialized_contract() {
14791485 let seq = client. ping ( ) ;
14801486 assert_eq ! ( seq, env. ledger( ) . sequence( ) ) ;
14811487}
1488+
1489+ // ── #895 – error code validation ─────────────────────────────────────────────
1490+
1491+ /// subscribe with a plan_id that was never created returns Error::PlanNotFound (code 10).
1492+ #[ test]
1493+ fn test_subscribe_nonexistent_plan_returns_plan_not_found ( ) {
1494+ let ( env, client, admin, token, _token_admin) = setup_test ( ) ;
1495+ let fee_recipient = Address :: generate ( & env) ;
1496+ client. init ( & admin, & 500 , & fee_recipient, & token. address , & 1000 ) ;
1497+ let fan = Address :: generate ( & env) ;
1498+
1499+ let result = client. try_subscribe ( & fan, & 9999u32 , & token. address ) ;
1500+ assert_eq ! (
1501+ result,
1502+ Err ( Ok ( SorobanError :: from_contract_error(
1503+ Error :: PlanNotFound as u32
1504+ ) ) )
1505+ ) ;
1506+ }
1507+
1508+ /// create_plan when paused returns Error::Paused (code 2).
1509+ #[ test]
1510+ fn test_create_plan_paused_returns_typed_error ( ) {
1511+ let ( _env, client, _admin, creator, _fan, token, _token_admin) = setup_paused ( ) ;
1512+ let result = client. try_create_plan ( & creator, & token. address , & 1000 , & 30 ) ;
1513+ assert_eq ! (
1514+ result,
1515+ Err ( Ok ( SorobanError :: from_contract_error( Error :: Paused as u32 ) ) )
1516+ ) ;
1517+ }
1518+
1519+ /// subscribe when paused returns Error::Paused (code 2).
1520+ #[ test]
1521+ fn test_subscribe_paused_returns_typed_error ( ) {
1522+ let ( env, client, admin, token, token_admin) = setup_test ( ) ;
1523+ let fee_recipient = Address :: generate ( & env) ;
1524+ let creator = Address :: generate ( & env) ;
1525+ let fan = Address :: generate ( & env) ;
1526+ client. init ( & admin, & 500 , & fee_recipient, & token. address , & 1000 ) ;
1527+ token_admin. mint ( & fan, & 50000 ) ;
1528+ let plan_id = client. create_plan ( & creator, & token. address , & 1000 , & 30 ) ;
1529+ client. pause ( ) ;
1530+ let result = client. try_subscribe ( & fan, & plan_id, & token. address ) ;
1531+ assert_eq ! (
1532+ result,
1533+ Err ( Ok ( SorobanError :: from_contract_error( Error :: Paused as u32 ) ) )
1534+ ) ;
1535+ }
1536+
1537+ /// cancel when paused returns Error::Paused (code 2).
1538+ #[ test]
1539+ fn test_cancel_paused_returns_typed_error ( ) {
1540+ let ( env, client, admin, token, token_admin) = setup_test ( ) ;
1541+ let fee_recipient = Address :: generate ( & env) ;
1542+ let creator = Address :: generate ( & env) ;
1543+ let fan = Address :: generate ( & env) ;
1544+ client. init ( & admin, & 0 , & fee_recipient, & token. address , & 1000 ) ;
1545+ token_admin. mint ( & fan, & 50000 ) ;
1546+ let plan_id = client. create_plan ( & creator, & token. address , & 1000 , & 30 ) ;
1547+ client. subscribe ( & fan, & plan_id, & token. address ) ;
1548+ client. pause ( ) ;
1549+ let result = client. try_cancel ( & fan, & creator, & 0 ) ;
1550+ assert_eq ! (
1551+ result,
1552+ Err ( Ok ( SorobanError :: from_contract_error( Error :: Paused as u32 ) ) )
1553+ ) ;
1554+ }
0 commit comments