feat(connector): [BOA] Handle refund status 201 (#4908)

Co-authored-by: Deepanshu Bansal <deepanshu.bansal@Deepanshu-Bansal-K3PYF02LFW.local>
This commit is contained in:
DEEPANSHU BANSAL
2024-06-07 15:23:00 +05:30
committed by GitHub
parent 5b92371a73
commit 13fa7d5c56

View File

@ -2649,9 +2649,12 @@ impl<F> TryFrom<&BankOfAmericaRouterData<&types::RefundsRouterData<F>>>
}
}
impl From<BankofamericaRefundStatus> for enums::RefundStatus {
fn from(item: BankofamericaRefundStatus) -> Self {
match item {
impl From<BankOfAmericaRefundResponse> for enums::RefundStatus {
fn from(item: BankOfAmericaRefundResponse) -> Self {
let error_reason = item
.error_information
.and_then(|error_info| error_info.reason);
match item.status {
BankofamericaRefundStatus::Succeeded | BankofamericaRefundStatus::Transmitted => {
Self::Success
}
@ -2659,11 +2662,18 @@ impl From<BankofamericaRefundStatus> for enums::RefundStatus {
| BankofamericaRefundStatus::Failed
| BankofamericaRefundStatus::Voided => Self::Failure,
BankofamericaRefundStatus::Pending => Self::Pending,
BankofamericaRefundStatus::TwoZeroOne => {
if error_reason == Some("PROCESSOR_DECLINED".to_string()) {
Self::Failure
} else {
Self::Pending
}
}
}
}
}
#[derive(Debug, Deserialize, Serialize)]
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct BankOfAmericaRefundResponse {
id: String,
@ -2678,19 +2688,19 @@ impl TryFrom<types::RefundsResponseRouterData<api::Execute, BankOfAmericaRefundR
fn try_from(
item: types::RefundsResponseRouterData<api::Execute, BankOfAmericaRefundResponse>,
) -> Result<Self, Self::Error> {
let refund_status = enums::RefundStatus::from(item.response.status.clone());
let refund_status = enums::RefundStatus::from(item.response.clone());
let response = if utils::is_refund_failure(refund_status) {
Err(types::ErrorResponse::foreign_from((
&item.response.error_information,
&None,
None,
item.http_code,
item.response.id.clone(),
item.response.id,
)))
} else {
Ok(types::RefundsResponseData {
connector_refund_id: item.response.id,
refund_status: enums::RefundStatus::from(item.response.status),
refund_status,
})
};
@ -2710,6 +2720,8 @@ pub enum BankofamericaRefundStatus {
Pending,
Voided,
Cancelled,
#[serde(rename = "201")]
TwoZeroOne,
}
#[derive(Debug, Deserialize, Serialize)]
@ -2739,8 +2751,26 @@ impl TryFrom<types::RefundsResponseRouterData<api::RSync, BankOfAmericaRsyncResp
.and_then(|application_information| application_information.status)
{
Some(status) => {
let refund_status: common_enums::RefundStatus =
enums::RefundStatus::from(status.clone());
let error_reason = item
.response
.error_information
.clone()
.and_then(|error_info| error_info.reason);
let refund_status = match status {
BankofamericaRefundStatus::Succeeded
| BankofamericaRefundStatus::Transmitted => enums::RefundStatus::Success,
BankofamericaRefundStatus::Cancelled
| BankofamericaRefundStatus::Failed
| BankofamericaRefundStatus::Voided => enums::RefundStatus::Failure,
BankofamericaRefundStatus::Pending => enums::RefundStatus::Pending,
BankofamericaRefundStatus::TwoZeroOne => {
if error_reason == Some("PROCESSOR_DECLINED".to_string()) {
enums::RefundStatus::Failure
} else {
enums::RefundStatus::Pending
}
}
};
if utils::is_refund_failure(refund_status) {
if status == BankofamericaRefundStatus::Voided {
Err(types::ErrorResponse::foreign_from((