@@ -1818,3 +1818,68 @@ fn test_cancel_paused_returns_typed_error() {
18181818 Err ( Ok ( SorobanError :: from_contract_error( Error :: Paused as u32 ) ) )
18191819 ) ;
18201820}
1821+
1822+ // ── create_plan parameter validation ─────────────────────────────────────────
1823+
1824+ /// create_plan rejects a zero amount with a typed InvalidPlanParams error.
1825+ #[ test]
1826+ fn test_create_plan_rejects_zero_amount ( ) {
1827+ let ( env, client, admin, token, _token_admin) = setup_test ( ) ;
1828+ let fee_recipient = Address :: generate ( & env) ;
1829+ client. init ( & admin, & 500 , & fee_recipient, & token. address , & 1000 ) ;
1830+ let creator = Address :: generate ( & env) ;
1831+
1832+ let result = client. try_create_plan ( & creator, & token. address , & 0 , & 30 ) ;
1833+ assert_eq ! (
1834+ result,
1835+ Err ( Ok ( SorobanError :: from_contract_error(
1836+ Error :: InvalidPlanParams as u32 ,
1837+ ) ) )
1838+ ) ;
1839+ }
1840+
1841+ /// create_plan rejects a negative amount with a typed InvalidPlanParams error.
1842+ #[ test]
1843+ fn test_create_plan_rejects_negative_amount ( ) {
1844+ let ( env, client, admin, token, _token_admin) = setup_test ( ) ;
1845+ let fee_recipient = Address :: generate ( & env) ;
1846+ client. init ( & admin, & 500 , & fee_recipient, & token. address , & 1000 ) ;
1847+ let creator = Address :: generate ( & env) ;
1848+
1849+ let result = client. try_create_plan ( & creator, & token. address , & -1 , & 30 ) ;
1850+ assert_eq ! (
1851+ result,
1852+ Err ( Ok ( SorobanError :: from_contract_error(
1853+ Error :: InvalidPlanParams as u32 ,
1854+ ) ) )
1855+ ) ;
1856+ }
1857+
1858+ /// create_plan rejects a zero interval_days with a typed InvalidPlanParams error.
1859+ #[ test]
1860+ fn test_create_plan_rejects_zero_interval_days ( ) {
1861+ let ( env, client, admin, token, _token_admin) = setup_test ( ) ;
1862+ let fee_recipient = Address :: generate ( & env) ;
1863+ client. init ( & admin, & 500 , & fee_recipient, & token. address , & 1000 ) ;
1864+ let creator = Address :: generate ( & env) ;
1865+
1866+ let result = client. try_create_plan ( & creator, & token. address , & 1000 , & 0 ) ;
1867+ assert_eq ! (
1868+ result,
1869+ Err ( Ok ( SorobanError :: from_contract_error(
1870+ Error :: InvalidPlanParams as u32 ,
1871+ ) ) )
1872+ ) ;
1873+ }
1874+
1875+ /// A valid plan (positive amount, non-zero interval_days) still succeeds.
1876+ #[ test]
1877+ fn test_create_plan_accepts_valid_params ( ) {
1878+ let ( env, client, admin, token, _token_admin) = setup_test ( ) ;
1879+ let fee_recipient = Address :: generate ( & env) ;
1880+ client. init ( & admin, & 500 , & fee_recipient, & token. address , & 1000 ) ;
1881+ let creator = Address :: generate ( & env) ;
1882+
1883+ let plan_id = client. create_plan ( & creator, & token. address , & 1000 , & 30 ) ;
1884+ assert_eq ! ( plan_id, 1 ) ;
1885+ }
0 commit comments