openai_interface/files/list/
mod.rs1pub mod request;
33pub mod response;
34
35#[cfg(test)]
36mod tests {
37 use std::sync::LazyLock;
38
39 use super::request::*;
40 use crate::rest::get::{Get, GetNoStream};
41
42 const QWEN_BASE_URL: &'static str = "https://dashscope.aliyuncs.com/compatible-mode/v1/";
43 const QWEN_API_KEY: LazyLock<&str> =
44 LazyLock::new(|| include_str!("../../../keys/modelstudio_domestic_key").trim());
45
46 #[test]
47 fn test_build_url_no_params() {
48 let request = ListFilesRequest::default();
49 let base_url = "https://api.openai.com/v1/";
50 let url = request.build_url(base_url).expect("Failed to build url");
51 assert_eq!(url, "https://api.openai.com/v1/files");
52 }
53
54 #[test]
55 fn test_build_url_with_purpose() {
56 let request = ListFilesRequest {
57 purpose: Some("fine-tune".to_string()),
58 ..Default::default()
59 };
60 let base_url = "https://api.openai.com/v1/";
61 let url = request.build_url(base_url).expect("Failed to build url");
62 assert_eq!(url, "https://api.openai.com/v1/files?purpose=fine-tune");
63 }
64
65 #[test]
66 fn test_build_url_with_limit() {
67 let request = ListFilesRequest {
68 limit: Some(100),
69 ..Default::default()
70 };
71 let base_url = "https://api.openai.com/v1/";
72 let url = request.build_url(base_url).expect("Failed to build url");
73 assert_eq!(url, "https://api.openai.com/v1/files?limit=100");
74 }
75
76 #[test]
77 fn test_build_url_with_after() {
78 let request = ListFilesRequest {
79 after: Some("file_123".to_string()),
80 ..Default::default()
81 };
82 let base_url = "https://api.openai.com/v1/";
83 let url = request.build_url(base_url).expect("Failed to build url");
84 assert_eq!(url, "https://api.openai.com/v1/files?after=file_123");
85 }
86
87 #[test]
88 fn test_build_url_with_all_params() {
89 let request = ListFilesRequest {
90 purpose: Some("assistants".to_string()),
91 limit: Some(50),
92 after: Some("file_abc".to_string()),
93 };
94 let base_url = "https://api.openai.com/v1/";
95 let url = request.build_url(base_url).expect("Failed to build url");
96 assert!(url.contains("after=file_abc"));
98 assert!(url.contains("limit=50"));
99 assert!(url.contains("purpose=assistants"));
100 assert!(url.starts_with("https://api.openai.com/v1/files?"));
101 }
102
103 #[test]
104 fn test_build_url_encoding() {
105 let request = ListFilesRequest {
106 purpose: Some("fine tune".to_string()), ..Default::default()
108 };
109 let base_url = "https://api.openai.com/v1/";
110 let url = request.build_url(base_url).expect("Failed to build url");
111 assert_eq!(url, "https://api.openai.com/v1/files?purpose=fine+tune");
112 }
113
114 #[tokio::test]
115 async fn test_query_qwen_no_params() -> Result<(), anyhow::Error> {
116 let request = ListFilesRequest::default();
117 let response = request.get_response(QWEN_BASE_URL, &QWEN_API_KEY).await?;
118
119 println!("Response: {:?}", response);
120
121 Ok(())
122 }
123
124 #[tokio::test]
125 async fn test_query_qwen_with_params() -> Result<(), anyhow::Error> {
126 let request = ListFilesRequest {
127 purpose: Some("batch".to_string()),
128 limit: Some(1),
129 ..Default::default()
131 };
132 let response = request.get_response(QWEN_BASE_URL, &QWEN_API_KEY).await?;
133
134 println!("Response: {:?}", response);
135
136 Ok(())
137 }
138}