@@ -198,12 +198,16 @@ impl Validate for BillValidateActionData {
198
198
. blockchain
199
199
. block_with_operation_code_exists ( BillOpCode :: RejectToAccept )
200
200
{
201
- return Err (
202
- ValidationError :: BillRequestToAcceptDidNotExpireAndWasNotRejected ,
203
- ) ;
201
+ return Err ( ValidationError :: BillRequestToAcceptDidNotExpireAndWasNotRejected ) ;
204
202
}
205
203
} 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
+ }
207
211
}
208
212
}
209
213
RecourseReason :: Pay ( _, _) => {
@@ -1027,6 +1031,7 @@ mod tests {
1027
1031
#[ rstest]
1028
1032
#[ 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 ( ( ) ) ) ]
1029
1033
#[ 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 ( ( ) ) ) ]
1030
1035
fn test_validate_bill_req_to_recourse_accept_valid (
1031
1036
#[ case] input : BillValidateActionData ,
1032
1037
#[ case] expected : Result < ( ) , ValidationError > ,
@@ -1043,7 +1048,7 @@ mod tests {
1043
1048
#[ 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 ) ) ]
1044
1049
#[ 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 ) ) ]
1045
1050
#[ 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 ) ) ]
1047
1052
#[ 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 ) ) ]
1048
1053
fn test_validate_bill_req_to_recourse_accept_errors (
1049
1054
#[ case] input : BillValidateActionData ,
0 commit comments