Added comprehensive tests to validate auto-refund trigger permissions and idempotency in the bounty escrow contract.
- Location:
src/test_auto_refund_permissions.rs - Module: Added to
lib.rsastest_auto_refund_permissions
- ✅
test_auto_refund_anyone_can_trigger_after_deadline- Validates that any user can trigger refund after deadline - ✅
test_auto_refund_admin_can_trigger_after_deadline- Validates admin can trigger refund after deadline - ✅
test_auto_refund_depositor_can_trigger_after_deadline- Validates depositor can trigger refund after deadline
- ✅
test_auto_refund_fails_before_deadline- Ensures refund fails before deadline - ✅
test_auto_refund_admin_cannot_bypass_deadline- Confirms even admin cannot bypass deadline - ✅
test_auto_refund_at_exact_deadline- Validates refund works at exact deadline boundary
- ✅
test_auto_refund_idempotent_second_call_fails- Ensures second refund call fails with FundsNotLocked error - ✅
test_auto_refund_balance_stable_after_first_refund- Verifies balances and state remain stable after refund
- ✅
test_auto_refund_different_users_same_result- Validates that different callers produce identical results
The refund() function is permissionless - anyone can trigger it after the deadline:
- No authentication required
- Only checks deadline has passed
- Funds always go to original depositor
The refund operation is naturally idempotent:
- First call: Changes status from
LockedtoRefunded - Second call: Fails with
FundsNotLockederror - No double-spending possible
- Balances remain consistent
- Refund strictly enforced at deadline (inclusive)
- No role can bypass deadline requirement
- Early refund requires separate admin approval flow
running 9 tests
test test_auto_refund_permissions::test_auto_refund_at_exact_deadline ... ok
test test_auto_refund_permissions::test_auto_refund_anyone_can_trigger_after_deadline ... ok
test test_auto_refund_permissions::test_auto_refund_admin_can_trigger_after_deadline ... ok
test test_auto_refund_permissions::test_auto_refund_admin_cannot_bypass_deadline - should panic ... ok
test test_auto_refund_permissions::test_auto_refund_depositor_can_trigger_after_deadline ... ok
test test_auto_refund_permissions::test_auto_refund_fails_before_deadline - should panic ... ok
test test_auto_refund_permissions::test_auto_refund_balance_stable_after_first_refund ... ok
test test_auto_refund_permissions::test_auto_refund_different_users_same_result ... ok
test test_auto_refund_permissions::test_auto_refund_idempotent_second_call_fails - should panic ... ok
test result: ok. 9 passed; 0 failed; 0 ignored
All existing tests continue to pass (35 total tests).
- Tests use minimal setup with only required components
- Each test is focused on a single aspect
- No external dependencies beyond standard test utilities
- Compatible with no_std environment