mirror of
				https://github.com/juspay/hyperswitch.git
				synced 2025-11-01 02:57:02 +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()? { |                 while let Some(key) = map.next_key()? { | ||||||
|                     match key { |                     match key { | ||||||
|                         "client_secret" => { |                         "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() { |                         "accepted_countries" => match output.accepted_countries.as_mut() { | ||||||
|                             Some(inner) => inner.push(map.next_value()?), |                             Some(inner) => inner.push(map.next_value()?), | ||||||
| @ -110,13 +114,25 @@ impl<'de> serde::Deserialize<'de> for ListPaymentMethodRequest { | |||||||
|                             } |                             } | ||||||
|                         }, |                         }, | ||||||
|                         "amount" => { |                         "amount" => { | ||||||
|                             output.amount = Some(map.next_value()?); |                             set_or_reject_duplicate( | ||||||
|  |                                 &mut output.amount, | ||||||
|  |                                 "amount", | ||||||
|  |                                 map.next_value()?, | ||||||
|  |                             )?; | ||||||
|                         } |                         } | ||||||
|                         "recurring_enabled" => { |                         "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" => { |                         "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)] | #[derive(Debug, serde::Serialize, serde::Deserialize)] | ||||||
| pub struct ListPaymentMethodResponse { | pub struct ListPaymentMethodResponse { | ||||||
|     pub payment_method: api_enums::PaymentMethodType, |     pub payment_method: api_enums::PaymentMethodType, | ||||||
|  | |||||||
| @ -149,6 +149,7 @@ pub struct MandateAmountData { | |||||||
| } | } | ||||||
|  |  | ||||||
| #[derive(Eq, PartialEq, Debug, serde::Deserialize, serde::Serialize, Clone)] | #[derive(Eq, PartialEq, Debug, serde::Deserialize, serde::Serialize, Clone)] | ||||||
|  | #[serde(rename_all = "snake_case")] | ||||||
| pub enum MandateType { | pub enum MandateType { | ||||||
|     SingleUse(MandateAmountData), |     SingleUse(MandateAmountData), | ||||||
|     MultiUse(Option<MandateAmountData>), |     MultiUse(Option<MandateAmountData>), | ||||||
| @ -838,3 +839,17 @@ mod amount { | |||||||
|         deserializer.deserialize_option(OptionalAmountVisitor) |         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 |     .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
	 Nishant Joshi
					Nishant Joshi