contribute() in contracts/escrow/src/lib.rs rejects both AlreadyPaid and AlreadyRefunded via the same match escrow.status block. contracts/escrow/src/test.rs has test_contribute_rejects_after_already_paid, which funds an escrow, releases it, then asserts a subsequent contribute returns Error::AlreadyPaid — but there's no equivalent test funding an escrow, letting it lapse into Refunded (either via admin-triggered early refund or the permissionless post-deadline path), and then asserting contribute returns Error::AlreadyRefunded. Add the missing sibling test, mirroring test_contribute_rejects_after_already_paid's structure.
contribute()incontracts/escrow/src/lib.rsrejects bothAlreadyPaidandAlreadyRefundedvia the samematch escrow.statusblock.contracts/escrow/src/test.rshastest_contribute_rejects_after_already_paid, which funds an escrow, releases it, then asserts a subsequentcontributereturnsError::AlreadyPaid— but there's no equivalent test funding an escrow, letting it lapse intoRefunded(either via admin-triggered early refund or the permissionless post-deadline path), and then assertingcontributereturnsError::AlreadyRefunded. Add the missing sibling test, mirroringtest_contribute_rejects_after_already_paid's structure.