feat(payments): add support for connector testing (Adyen) (#7874)

Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
This commit is contained in:
Kashif
2025-04-24 20:30:10 +05:30
committed by GitHub
parent d9a67aa144
commit f1bb4a09ed
12 changed files with 256 additions and 51 deletions

View File

@ -307,6 +307,7 @@ pub async fn construct_payment_router_data_for_authorize<'a>(
additional_payment_method_data: None,
merchant_account_id: None,
merchant_config_currency: None,
connector_testing_data: None,
};
let connector_mandate_request_reference_id = payment_data
.payment_attempt
@ -960,6 +961,7 @@ pub async fn construct_payment_router_data_for_setup_mandate<'a>(
shipping_cost: payment_data.payment_intent.amount_details.shipping_cost,
capture_method: Some(payment_data.payment_intent.capture_method),
complete_authorize_url,
connector_testing_data: None,
};
let connector_mandate_request_reference_id = payment_data
.payment_attempt
@ -3183,7 +3185,7 @@ impl<F: Clone> TryFrom<PaymentAdditionalData<'_, F>> for types::PaymentsAuthoriz
field_name: "browser_info",
})?;
let order_category = additional_data
let connector_metadata = additional_data
.payment_data
.payment_intent
.connector_metadata
@ -3193,21 +3195,16 @@ impl<F: Clone> TryFrom<PaymentAdditionalData<'_, F>> for types::PaymentsAuthoriz
.change_context(errors::ApiErrorResponse::InternalServerError)
.attach_printable("Failed parsing ConnectorMetadata")
})
.transpose()?
.and_then(|cm| cm.noon.and_then(|noon| noon.order_category));
.transpose()?;
let braintree_metadata = additional_data
.payment_data
.payment_intent
.connector_metadata
.clone()
.map(|cm| {
cm.parse_value::<api_models::payments::ConnectorMetadata>("ConnectorMetadata")
.change_context(errors::ApiErrorResponse::InternalServerError)
.attach_printable("Failed parsing ConnectorMetadata")
})
.transpose()?
.and_then(|cm| cm.braintree);
let order_category = connector_metadata.as_ref().and_then(|cm| {
cm.noon
.as_ref()
.and_then(|noon| noon.order_category.clone())
});
let braintree_metadata = connector_metadata
.as_ref()
.and_then(|cm| cm.braintree.clone());
let merchant_account_id = braintree_metadata
.as_ref()
@ -3301,6 +3298,30 @@ impl<F: Clone> TryFrom<PaymentAdditionalData<'_, F>> for types::PaymentsAuthoriz
.clone();
let shipping_cost = payment_data.payment_intent.shipping_cost;
let connector = api_models::enums::Connector::from_str(connector_name)
.change_context(errors::ConnectorError::InvalidConnectorName)
.change_context(errors::ApiErrorResponse::InvalidDataValue {
field_name: "connector",
})
.attach_printable_lazy(|| {
format!("unable to parse connector name {connector_name:?}")
})?;
let connector_testing_data = connector_metadata
.and_then(|cm| match connector {
api_models::enums::Connector::Adyen => cm
.adyen
.map(|adyen_cm| adyen_cm.testing)
.map(|testing_data| {
serde_json::to_value(testing_data)
.change_context(errors::ApiErrorResponse::InternalServerError)
.attach_printable("Failed to parse Adyen testing data")
}),
_ => None,
})
.transpose()?
.map(pii::SecretSerdeValue::new);
Ok(Self {
payment_method_data: (payment_method_data.get_required_value("payment_method_data")?),
setup_future_usage: payment_data.payment_attempt.setup_future_usage_applied,
@ -3355,6 +3376,7 @@ impl<F: Clone> TryFrom<PaymentAdditionalData<'_, F>> for types::PaymentsAuthoriz
shipping_cost,
merchant_account_id,
merchant_config_currency,
connector_testing_data,
})
}
}
@ -4106,6 +4128,40 @@ impl<F: Clone> TryFrom<PaymentAdditionalData<'_, F>> for types::SetupMandateRequ
payment_data.creds_identifier.as_deref(),
));
let connector = api_models::enums::Connector::from_str(connector_name)
.change_context(errors::ConnectorError::InvalidConnectorName)
.change_context(errors::ApiErrorResponse::InvalidDataValue {
field_name: "connector",
})
.attach_printable_lazy(|| {
format!("unable to parse connector name {connector_name:?}")
})?;
let connector_testing_data = payment_data
.payment_intent
.connector_metadata
.as_ref()
.map(|cm| {
cm.clone()
.parse_value::<api_models::payments::ConnectorMetadata>("ConnectorMetadata")
.change_context(errors::ApiErrorResponse::InternalServerError)
.attach_printable("Failed parsing ConnectorMetadata")
})
.transpose()?
.and_then(|cm| match connector {
api_models::enums::Connector::Adyen => cm
.adyen
.map(|adyen_cm| adyen_cm.testing)
.map(|testing_data| {
serde_json::to_value(testing_data)
.change_context(errors::ApiErrorResponse::InternalServerError)
.attach_printable("Failed to parse Adyen testing data")
}),
_ => None,
})
.transpose()?
.map(pii::SecretSerdeValue::new);
Ok(Self {
currency: payment_data.currency,
confirm: true,
@ -4138,6 +4194,7 @@ impl<F: Clone> TryFrom<PaymentAdditionalData<'_, F>> for types::SetupMandateRequ
webhook_url,
complete_authorize_url,
capture_method: payment_data.payment_attempt.capture_method,
connector_testing_data,
})
}
}

View File

@ -923,6 +923,7 @@ impl ForeignFrom<&SetupMandateRouterData> for PaymentsAuthorizeData {
shipping_cost: data.request.shipping_cost,
merchant_account_id: None,
merchant_config_currency: None,
connector_testing_data: data.request.connector_testing_data.clone(),
}
}
}

View File

@ -63,6 +63,7 @@ impl VerifyConnectorData {
shipping_cost: None,
merchant_account_id: None,
merchant_config_currency: None,
connector_testing_data: None,
}
}

View File

@ -987,6 +987,7 @@ impl Default for PaymentAuthorizeType {
shipping_cost: None,
merchant_account_id: None,
merchant_config_currency: None,
connector_testing_data: None,
};
Self(data)
}