@@ -198,12 +198,16 @@ impl Validate for BillValidateActionData {
198198 . blockchain
199199 . block_with_operation_code_exists ( BillOpCode :: RejectToAccept )
200200 {
201- return Err (
202- ValidationError :: BillRequestToAcceptDidNotExpireAndWasNotRejected ,
203- ) ;
201+ return Err ( ValidationError :: BillRequestToAcceptDidNotExpireAndWasNotRejected ) ;
204202 }
205203 } else {
206- return Err ( ValidationError :: BillWasNotRequestedToAccept ) ;
204+ // if there was no request to accept, only if it was rejected
205+ if !self
206+ . blockchain
207+ . block_with_operation_code_exists ( BillOpCode :: RejectToAccept )
208+ {
209+ return Err ( ValidationError :: BillRequestToAcceptDidNotExpireAndWasNotRejected ) ;
210+ }
207211 }
208212 }
209213 RecourseReason :: Pay ( _, _) => {
@@ -1027,6 +1031,7 @@ mod tests {
10271031 #[ rstest]
10281032 #[ case:: req_to_recourse_not_rejected_but_expired( BillValidateActionData { timestamp: now( ) . timestamp( ) as u64 + ( RECOURSE_DEADLINE_SECONDS * 2 ) , endorsee_node_id: Some ( TEST_PUB_KEY_SECP . into( ) ) , bill_action: BillAction :: RequestRecourse ( valid_other_identity_public_data( ) , RecourseReason :: Accept ) , ..valid_bill_validate_action_data( add_req_to_accept_block( add_endorse_block( add_endorse_block( valid_bill_blockchain_issue( valid_bill_issue_block_data( ) , ) , valid_other_identity_public_data( ) , valid_identity_public_data( ) ) , valid_identity_public_data( ) , valid_other_identity_public_data( ) ) ) ) } , Ok ( ( ) ) ) ]
10291033 #[ case:: req_to_recourse_not_expired_but_rejected( BillValidateActionData { endorsee_node_id: Some ( TEST_PUB_KEY_SECP . into( ) ) , bill_action: BillAction :: RequestRecourse ( valid_other_identity_public_data( ) , RecourseReason :: Accept ) , ..valid_bill_validate_action_data( add_reject_accept_block( add_req_to_accept_block( add_endorse_block( add_endorse_block( valid_bill_blockchain_issue( valid_bill_issue_block_data( ) , ) , valid_other_identity_public_data( ) , valid_identity_public_data( ) ) , valid_identity_public_data( ) , valid_other_identity_public_data( ) ) ) ) ) } , Ok ( ( ) ) ) ]
1034+ #[ case:: req_to_recourse_not_req_to_accept_but_rejected( BillValidateActionData { endorsee_node_id: Some ( TEST_PUB_KEY_SECP . into( ) ) , bill_action: BillAction :: RequestRecourse ( valid_other_identity_public_data( ) , RecourseReason :: Accept ) , ..valid_bill_validate_action_data( add_reject_accept_block( add_endorse_block( add_endorse_block( valid_bill_blockchain_issue( valid_bill_issue_block_data( ) , ) , valid_other_identity_public_data( ) , valid_identity_public_data( ) ) , valid_identity_public_data( ) , valid_other_identity_public_data( ) ) ) ) } , Ok ( ( ) ) ) ]
10301035 fn test_validate_bill_req_to_recourse_accept_valid (
10311036 #[ case] input : BillValidateActionData ,
10321037 #[ case] expected : Result < ( ) , ValidationError > ,
@@ -1043,7 +1048,7 @@ mod tests {
10431048 #[ case:: active_recourse_blocked( BillValidateActionData { bill_action: BillAction :: RequestRecourse ( valid_identity_public_data( ) , RecourseReason :: Accept ) , ..valid_bill_validate_action_data( add_req_to_recourse_accept_block( valid_bill_blockchain_issue( valid_bill_issue_block_data( ) , ) ) ) } , Err ( ValidationError :: BillIsInRecourseAndWaitingForPayment ) ) ]
10441049 #[ case:: req_to_recourse_not_holder( BillValidateActionData { bill_action: BillAction :: RequestRecourse ( valid_identity_public_data( ) , RecourseReason :: Accept ) , signer_node_id: TEST_PUB_KEY_SECP . into( ) , ..valid_bill_validate_action_data( valid_bill_blockchain_issue( valid_bill_issue_block_data( ) , ) ) } , Err ( ValidationError :: CallerIsNotHolder ) ) ]
10451050 #[ case:: req_to_recourse_not_past_endorsee( BillValidateActionData { endorsee_node_id: Some ( TEST_PUB_KEY_SECP . into( ) ) , bill_action: BillAction :: RequestRecourse ( valid_other_identity_public_data( ) , RecourseReason :: Accept ) , ..valid_bill_validate_action_data( add_endorse_block( valid_bill_blockchain_issue( valid_bill_issue_block_data( ) , ) , valid_other_identity_public_data( ) , valid_identity_public_data( ) ) ) } , Err ( ValidationError :: RecourseeNotPastHolder ) ) ]
1046- #[ case:: req_to_recourse_not_req_to_accept ( BillValidateActionData { endorsee_node_id: Some ( TEST_PUB_KEY_SECP . into( ) ) , bill_action: BillAction :: RequestRecourse ( valid_other_identity_public_data( ) , RecourseReason :: Accept ) , ..valid_bill_validate_action_data( add_endorse_block( add_endorse_block( valid_bill_blockchain_issue( valid_bill_issue_block_data( ) , ) , valid_other_identity_public_data( ) , valid_identity_public_data( ) ) , valid_identity_public_data( ) , valid_other_identity_public_data( ) ) ) } , Err ( ValidationError :: BillWasNotRequestedToAccept ) ) ]
1051+ #[ case:: req_to_recourse_not_req_to_accept_or_rejected ( BillValidateActionData { endorsee_node_id: Some ( TEST_PUB_KEY_SECP . into( ) ) , bill_action: BillAction :: RequestRecourse ( valid_other_identity_public_data( ) , RecourseReason :: Accept ) , ..valid_bill_validate_action_data( add_endorse_block( add_endorse_block( valid_bill_blockchain_issue( valid_bill_issue_block_data( ) , ) , valid_other_identity_public_data( ) , valid_identity_public_data( ) ) , valid_identity_public_data( ) , valid_other_identity_public_data( ) ) ) } , Err ( ValidationError :: BillRequestToAcceptDidNotExpireAndWasNotRejected ) ) ]
10471052 #[ case:: req_to_recourse_not_expired_or_rejected( BillValidateActionData { endorsee_node_id: Some ( TEST_PUB_KEY_SECP . into( ) ) , bill_action: BillAction :: RequestRecourse ( valid_other_identity_public_data( ) , RecourseReason :: Accept ) , ..valid_bill_validate_action_data( add_req_to_accept_block( add_endorse_block( add_endorse_block( valid_bill_blockchain_issue( valid_bill_issue_block_data( ) , ) , valid_other_identity_public_data( ) , valid_identity_public_data( ) ) , valid_identity_public_data( ) , valid_other_identity_public_data( ) ) ) ) } , Err ( ValidationError :: BillRequestToAcceptDidNotExpireAndWasNotRejected ) ) ]
10481053 fn test_validate_bill_req_to_recourse_accept_errors (
10491054 #[ case] input : BillValidateActionData ,
0 commit comments