mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-30 01:27:31 +08:00
fix: mandate_type change & unittests (#132)
This commit is contained in:
@ -95,7 +95,11 @@ impl<'de> serde::Deserialize<'de> for ListPaymentMethodRequest {
|
||||
while let Some(key) = map.next_key()? {
|
||||
match key {
|
||||
"client_secret" => {
|
||||
output.client_secret = Some(map.next_value()?);
|
||||
set_or_reject_duplicate(
|
||||
&mut output.client_secret,
|
||||
"client_secret",
|
||||
map.next_value()?,
|
||||
)?;
|
||||
}
|
||||
"accepted_countries" => match output.accepted_countries.as_mut() {
|
||||
Some(inner) => inner.push(map.next_value()?),
|
||||
@ -110,13 +114,25 @@ impl<'de> serde::Deserialize<'de> for ListPaymentMethodRequest {
|
||||
}
|
||||
},
|
||||
"amount" => {
|
||||
output.amount = Some(map.next_value()?);
|
||||
set_or_reject_duplicate(
|
||||
&mut output.amount,
|
||||
"amount",
|
||||
map.next_value()?,
|
||||
)?;
|
||||
}
|
||||
"recurring_enabled" => {
|
||||
output.recurring_enabled = Some(map.next_value()?);
|
||||
set_or_reject_duplicate(
|
||||
&mut output.recurring_enabled,
|
||||
"recurring_enabled",
|
||||
map.next_value()?,
|
||||
)?;
|
||||
}
|
||||
"installment_payment_enabled" => {
|
||||
output.installment_payment_enabled = Some(map.next_value()?);
|
||||
set_or_reject_duplicate(
|
||||
&mut output.installment_payment_enabled,
|
||||
"installment_payment_enabled",
|
||||
map.next_value()?,
|
||||
)?;
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
@ -130,6 +146,21 @@ impl<'de> serde::Deserialize<'de> for ListPaymentMethodRequest {
|
||||
}
|
||||
}
|
||||
|
||||
// Try to set the provided value to the data otherwise throw an error
|
||||
fn set_or_reject_duplicate<T, E: de::Error>(
|
||||
data: &mut Option<T>,
|
||||
name: &'static str,
|
||||
value: T,
|
||||
) -> Result<(), E> {
|
||||
match data {
|
||||
Some(_inner) => Err(de::Error::duplicate_field(name)),
|
||||
None => {
|
||||
*data = Some(value);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||
pub struct ListPaymentMethodResponse {
|
||||
pub payment_method: api_enums::PaymentMethodType,
|
||||
|
||||
@ -149,6 +149,7 @@ pub struct MandateAmountData {
|
||||
}
|
||||
|
||||
#[derive(Eq, PartialEq, Debug, serde::Deserialize, serde::Serialize, Clone)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum MandateType {
|
||||
SingleUse(MandateAmountData),
|
||||
MultiUse(Option<MandateAmountData>),
|
||||
@ -838,3 +839,17 @@ mod amount {
|
||||
deserializer.deserialize_option(OptionalAmountVisitor)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_mandate_type() {
|
||||
let mandate_type = MandateType::default();
|
||||
assert_eq!(
|
||||
serde_json::to_string(&mandate_type).unwrap(),
|
||||
r#"{"multi_use":null}"#
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@ -142,3 +142,30 @@ pub async fn payment_method_delete_api(
|
||||
)
|
||||
.await
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use api_models::payment_methods::ListPaymentMethodRequest;
|
||||
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_custom_list_deserialization() {
|
||||
let dummy_data = "amount=120&recurring_enabled=true&installment_payment_enabled=true&accepted_countries=US&accepted_countries=IN";
|
||||
let de_query: web::Query<payment_methods::ListPaymentMethodRequest> =
|
||||
web::Query::from_query(dummy_data).unwrap();
|
||||
let de_struct = de_query.into_inner();
|
||||
assert_eq!(
|
||||
de_struct.accepted_countries,
|
||||
Some(vec!["US".to_string(), "IN".to_string()])
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_custom_list_deserialization_multi_amount() {
|
||||
let dummy_data = "amount=120&recurring_enabled=true&amount=1000";
|
||||
let de_query: Result<web::Query<ListPaymentMethodRequest>, _> =
|
||||
web::Query::from_query(dummy_data);
|
||||
assert!(de_query.is_err())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user