Skip to content

Commit a22a71f

Browse files
authored
Fix request to recourse accept validation (#481)
1 parent bc540e2 commit a22a71f

File tree

7 files changed

+16
-11
lines changed

7 files changed

+16
-11
lines changed

crates/bcr-ebill-api/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "bcr-ebill-api"
3-
version = "0.3.6"
3+
version = "0.3.7"
44
edition = "2024"
55

66
[lib]

crates/bcr-ebill-core/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "bcr-ebill-core"
3-
version = "0.3.6"
3+
version = "0.3.7"
44
edition = "2024"
55

66
[lib]

crates/bcr-ebill-core/src/bill/validation.rs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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,

crates/bcr-ebill-persistence/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "bcr-ebill-persistence"
3-
version = "0.3.6"
3+
version = "0.3.7"
44
edition = "2024"
55

66
[lib]

crates/bcr-ebill-transport/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "bcr-ebill-transport"
3-
version = "0.3.6"
3+
version = "0.3.7"
44
edition = "2024"
55

66
[lib]

crates/bcr-ebill-wasm/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "bcr-ebill-wasm"
3-
version = "0.3.6"
3+
version = "0.3.7"
44
edition = "2024"
55

66
[lib]

crates/bcr-ebill-web/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "bcr-ebill-web"
3-
version = "0.3.6"
3+
version = "0.3.7"
44
edition = "2024"
55

66
[dependencies]

0 commit comments

Comments
 (0)