@@ -1578,6 +1578,108 @@ fn test_partial_claim_exceeding_remaining_coverage_is_rejected() {
15781578 client. submit_claim ( & policy_id, & 100_000 , & String :: from_str ( & env, "proof2" ) ) ;
15791579}
15801580
1581+ // ── Issue #379 — Trigger condition length check ───────────────────────────────
1582+
1583+ #[ test]
1584+ fn test_create_policy_accepts_max_length_trigger_condition ( ) {
1585+ let ( env, contract_id, _admin, policyholder, _token) = setup_insurance_contract ( ) ;
1586+ let client = StellarInsureClient :: new ( & env, & contract_id) ;
1587+
1588+ let sac = soroban_sdk:: token:: StellarAssetClient :: new ( & env, & _token) ;
1589+ sac. mint ( & policyholder, & 1_000_000 ) ;
1590+
1591+ // Exactly 256 characters (the limit)
1592+ let long_condition = "X" . repeat ( 256 ) ;
1593+ let premium = client. calculate_premium ( & PolicyType :: Weather , & 1_000_000 , & 2_592_000 ) ;
1594+ let policy_id = client. create_policy (
1595+ & policyholder,
1596+ & PolicyType :: Weather ,
1597+ & 1_000_000 ,
1598+ & premium,
1599+ & 2_592_000 ,
1600+ & String :: from_str ( & env, & long_condition) ,
1601+ ) ;
1602+ assert_eq ! ( policy_id, 0 ) ;
1603+ }
1604+
1605+ #[ test]
1606+ #[ should_panic( expected = "#36" ) ]
1607+ fn test_create_policy_rejects_oversized_trigger_condition ( ) {
1608+ let ( env, contract_id, _admin, policyholder, _token) = setup_insurance_contract ( ) ;
1609+ let client = StellarInsureClient :: new ( & env, & contract_id) ;
1610+
1611+ let sac = soroban_sdk:: token:: StellarAssetClient :: new ( & env, & _token) ;
1612+ sac. mint ( & policyholder, & 1_000_000 ) ;
1613+
1614+ // 257 characters — exceeds the limit
1615+ let long_condition = "X" . repeat ( 257 ) ;
1616+ let premium = client. calculate_premium ( & PolicyType :: Weather , & 1_000_000 , & 2_592_000 ) ;
1617+ client. create_policy (
1618+ & policyholder,
1619+ & PolicyType :: Weather ,
1620+ & 1_000_000 ,
1621+ & premium,
1622+ & 2_592_000 ,
1623+ & String :: from_str ( & env, & long_condition) ,
1624+ ) ;
1625+ }
1626+
1627+ // ── Issue #382 — Checked addition for total premium ────────────────────────────
1628+
1629+ #[ test]
1630+ fn test_pay_premium_updates_total_premium ( ) {
1631+ let ( env, contract_id, _admin, policyholder, _token) = setup_insurance_contract ( ) ;
1632+ let client = StellarInsureClient :: new ( & env, & contract_id) ;
1633+
1634+ let premium = client. calculate_premium ( & PolicyType :: Weather , & 1_000_000 , & 2_592_000 ) ;
1635+ // Mint enough tokens for premium
1636+ let sac = soroban_sdk:: token:: StellarAssetClient :: new ( & env, & _token) ;
1637+ sac. mint ( & policyholder, & premium) ;
1638+
1639+ let policy_id = client. create_policy (
1640+ & policyholder,
1641+ & PolicyType :: Weather ,
1642+ & 1_000_000 ,
1643+ & premium,
1644+ & 2_592_000 ,
1645+ & String :: from_str ( & env, "temperature < 0" ) ,
1646+ ) ;
1647+ client. pay_premium ( & policy_id, & premium) ;
1648+
1649+ let stats = client. get_treasury_stats ( ) ;
1650+ assert_eq ! ( stats. total_premium_collected, premium) ;
1651+ }
1652+
1653+ #[ test]
1654+ fn test_pay_premium_updates_total_premium_correctly ( ) {
1655+ let ( env, contract_id, _admin, policyholder, _token) = setup_insurance_contract ( ) ;
1656+ let client = StellarInsureClient :: new ( & env, & contract_id) ;
1657+
1658+ let premium = client. calculate_premium ( & PolicyType :: Weather , & 1_000_000 , & 2_592_000 ) ;
1659+ let two_premiums = premium. checked_mul ( 2 ) . unwrap ( ) ;
1660+ let sac = soroban_sdk:: token:: StellarAssetClient :: new ( & env, & _token) ;
1661+ sac. mint ( & policyholder, & two_premiums) ;
1662+
1663+ let policy_id = client. create_policy (
1664+ & policyholder,
1665+ & PolicyType :: Weather ,
1666+ & 1_000_000 ,
1667+ & premium,
1668+ & 2_592_000 ,
1669+ & String :: from_str ( & env, "temperature < 0" ) ,
1670+ ) ;
1671+ client. pay_premium ( & policy_id, & premium) ;
1672+
1673+ let stats = client. get_treasury_stats ( ) ;
1674+ assert_eq ! ( stats. total_premium_collected, premium) ;
1675+
1676+ // A second premium payment on the same policy also increases the total
1677+ client. pay_premium ( & policy_id, & premium) ;
1678+
1679+ let stats = client. get_treasury_stats ( ) ;
1680+ assert_eq ! ( stats. total_premium_collected, two_premiums) ;
1681+ }
1682+
15811683// ── Issue #381 — Checked arithmetic ───────────────────────────────────────────
15821684
15831685#[ test]
0 commit comments