use crate::{IdempotencyKey, Money, PaymentProvider, PaymentStatus, ProviderReference};
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct RefundRequest {
pub provider: PaymentProvider,
pub provider_reference: ProviderReference,
pub idempotency_key: IdempotencyKey,
pub amount: Option<Money>,
pub reason: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CaptureRequest {
pub provider: PaymentProvider,
pub provider_reference: ProviderReference,
pub idempotency_key: IdempotencyKey,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct RefundResponse {
pub provider: PaymentProvider,
pub provider_reference: ProviderReference,
pub status: PaymentStatus,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CaptureResponse {
pub provider: PaymentProvider,
pub provider_reference: ProviderReference,
pub status: PaymentStatus,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn write_requests_carry_idempotency_keys() {
let key = IdempotencyKey::new("ORDER-1:refund").expect("key should be valid");
let refund = RefundRequest {
provider: PaymentProvider::Stripe,
provider_reference: ProviderReference::new("pi_123")
.expect("reference should be valid"),
idempotency_key: key.clone(),
amount: None,
reason: None,
};
let capture = CaptureRequest {
provider: PaymentProvider::PayPal,
provider_reference: ProviderReference::new("ORDER-1")
.expect("reference should be valid"),
idempotency_key: IdempotencyKey::new("ORDER-1:capture").expect("key should be valid"),
};
assert_eq!(refund.idempotency_key, key);
assert_eq!(capture.provider, PaymentProvider::PayPal);
}
}