openai_interface/files/list/
mod.rs1pub mod request;
2pub mod response;
3
4#[cfg(test)]
5mod tests {
6 use std::sync::LazyLock;
7
8 use super::request::*;
9 use crate::rest::get::{Get, GetNoStream};
10
11 const QWEN_BASE_URL: &'static str = "https://dashscope.aliyuncs.com/compatible-mode/v1/";
12 const QWEN_API_KEY: LazyLock<&str> =
13 LazyLock::new(|| include_str!("../../../keys/modelstudio_domestic_key").trim());
14
15 #[test]
16 fn test_build_url_no_params() {
17 let request = ListFilesRequest::default();
18 let base_url = "https://api.openai.com/v1/";
19 let url = request.build_url(base_url).expect("Failed to build url");
20 assert_eq!(url, "https://api.openai.com/v1/files");
21 }
22
23 #[test]
24 fn test_build_url_with_purpose() {
25 let request = ListFilesRequest {
26 purpose: Some("fine-tune".to_string()),
27 ..Default::default()
28 };
29 let base_url = "https://api.openai.com/v1/";
30 let url = request.build_url(base_url).expect("Failed to build url");
31 assert_eq!(url, "https://api.openai.com/v1/files?purpose=fine-tune");
32 }
33
34 #[test]
35 fn test_build_url_with_limit() {
36 let request = ListFilesRequest {
37 limit: Some(100),
38 ..Default::default()
39 };
40 let base_url = "https://api.openai.com/v1/";
41 let url = request.build_url(base_url).expect("Failed to build url");
42 assert_eq!(url, "https://api.openai.com/v1/files?limit=100");
43 }
44
45 #[test]
46 fn test_build_url_with_after() {
47 let request = ListFilesRequest {
48 after: Some("file_123".to_string()),
49 ..Default::default()
50 };
51 let base_url = "https://api.openai.com/v1/";
52 let url = request.build_url(base_url).expect("Failed to build url");
53 assert_eq!(url, "https://api.openai.com/v1/files?after=file_123");
54 }
55
56 #[test]
57 fn test_build_url_with_all_params() {
58 let request = ListFilesRequest {
59 purpose: Some("assistants".to_string()),
60 limit: Some(50),
61 after: Some("file_abc".to_string()),
62 };
63 let base_url = "https://api.openai.com/v1/";
64 let url = request.build_url(base_url).expect("Failed to build url");
65 assert!(url.contains("after=file_abc"));
67 assert!(url.contains("limit=50"));
68 assert!(url.contains("purpose=assistants"));
69 assert!(url.starts_with("https://api.openai.com/v1/files?"));
70 }
71
72 #[test]
73 fn test_build_url_encoding() {
74 let request = ListFilesRequest {
75 purpose: Some("fine tune".to_string()), ..Default::default()
77 };
78 let base_url = "https://api.openai.com/v1/";
79 let url = request.build_url(base_url).expect("Failed to build url");
80 assert_eq!(url, "https://api.openai.com/v1/files?purpose=fine+tune");
81 }
82
83 #[tokio::test]
84 async fn test_query_qwen_no_params() -> Result<(), anyhow::Error> {
85 let request = ListFilesRequest::default();
86 let response = request.get_response(QWEN_BASE_URL, &QWEN_API_KEY).await?;
87
88 println!("Response: {:?}", response);
89
90 Ok(())
91 }
92
93 #[tokio::test]
94 async fn test_query_qwen_with_params() -> Result<(), anyhow::Error> {
95 let request = ListFilesRequest {
96 purpose: Some("batch".to_string()),
97 limit: Some(1),
98 ..Default::default()
100 };
101 let response = request.get_response(QWEN_BASE_URL, &QWEN_API_KEY).await?;
102
103 println!("Response: {:?}", response);
104
105 Ok(())
106 }
107}