rhood_core/endpoints/
transfers.rs1use crate::Result;
2use crate::api::paths;
3use crate::client::RobinhoodClient;
4use crate::models::transfer::Transfer;
5
6impl RobinhoodClient {
7 pub async fn get_transfers(&self) -> Result<Vec<Transfer>> {
17 self.get_paginated(&self.bonfire_url(paths::UNIFIED_TRANSFERS), &[])
18 .await
19 }
20}
21
22#[cfg(test)]
23mod tests {
24 use crate::models::transfer::Transfer;
25
26 #[test]
27 fn transfer_deserializes_full() {
28 let json = r#"{
29 "id": "xfer-001",
30 "transfer_type": "originated_ach",
31 "amount": "500.00",
32 "currency": "USD",
33 "direction": "pull",
34 "state": "completed",
35 "created_at": "2026-03-01T10:00:00Z",
36 "updated_at": "2026-03-02T10:00:00Z",
37 "net_amount": "500.00",
38 "service_fee": "0.00",
39 "originating_account_id": "bank-001",
40 "originating_account_type": "ach",
41 "receiving_account_id": "rh-001",
42 "receiving_account_type": "brokerage",
43 "is_visible_in_history": true,
44 "details": {"ach_relationship_id": "rel-001"}
45 }"#;
46 let xfer: Transfer = serde_json::from_str(json).unwrap();
47 assert_eq!(xfer.id.as_deref(), Some("xfer-001"));
48 assert_eq!(xfer.transfer_type.as_deref(), Some("originated_ach"));
49 assert_eq!(xfer.direction.as_deref(), Some("pull"));
50 assert!(xfer.details.is_some());
51 }
52
53 #[test]
54 fn transfer_handles_missing_fields() {
55 let json = r#"{"id": "xfer-002", "state": "pending"}"#;
56 let xfer: Transfer = serde_json::from_str(json).unwrap();
57 assert_eq!(xfer.id.as_deref(), Some("xfer-002"));
58 assert!(xfer.details.is_none());
59 assert!(xfer.transfer_type.is_none());
60 }
61}