tmdb_api/company/
images.rs1use crate::client::Executor;
2
3#[derive(Clone, Debug, Deserialize, Serialize)]
4pub struct CompanyImage {
5 pub aspect_ratio: f64,
6 pub file_path: String,
7 pub height: u64,
8 pub width: u64,
9 pub id: String,
10 pub file_type: String,
11 pub vote_average: f64,
12 pub vote_count: u64,
13}
14
15#[derive(Clone, Debug, Deserialize)]
16pub struct Response {
17 pub logos: Vec<CompanyImage>,
18}
19
20impl<E: Executor> crate::Client<E> {
21 pub async fn get_company_images(&self, company_id: u64) -> crate::Result<Response> {
37 let path = format!("/company/{company_id}/images");
38 self.execute(&path, &()).await
39 }
40}
41
42#[cfg(test)]
43mod tests {
44 use crate::client::Client;
45 use crate::client::reqwest::Client as ReqwestClient;
46 use mockito::Matcher;
47
48 #[tokio::test]
49 async fn it_works() {
50 let mut server = mockito::Server::new_async().await;
51 let m = server
52 .mock("GET", "/company/1/images")
53 .match_query(Matcher::UrlEncoded("api_key".into(), "secret".into()))
54 .with_status(200)
55 .with_header("content-type", "application/json")
56 .with_body(include_str!("../../assets/company-images.json"))
57 .create_async()
58 .await;
59
60 let client = Client::<ReqwestClient>::builder()
61 .with_api_key("secret".into())
62 .with_base_url(server.url())
63 .build()
64 .unwrap();
65 let result = client.get_company_images(1).await.unwrap();
66 assert_eq!(result.logos.len(), 2);
67
68 m.assert_async().await;
69 }
70
71 #[tokio::test]
72 async fn invalid_api_key() {
73 let mut server = mockito::Server::new_async().await;
74 let m = server
75 .mock("GET", "/company/1/images")
76 .match_query(Matcher::UrlEncoded("api_key".into(), "secret".into()))
77 .with_status(401)
78 .with_header("content-type", "application/json")
79 .with_body(include_str!("../../assets/invalid-api-key.json"))
80 .create_async()
81 .await;
82
83 let client = Client::<ReqwestClient>::builder()
84 .with_api_key("secret".into())
85 .with_base_url(server.url())
86 .build()
87 .unwrap();
88 let err = client.get_company_images(1).await.unwrap_err();
89 let server_err = err.as_server_error().unwrap();
90 assert_eq!(server_err.status_code, 7);
91
92 m.assert_async().await;
93 }
94
95 #[tokio::test]
96 async fn resource_not_found() {
97 let mut server = mockito::Server::new_async().await;
98 let m = server
99 .mock("GET", "/company/1/images")
100 .match_query(Matcher::UrlEncoded("api_key".into(), "secret".into()))
101 .with_status(404)
102 .with_header("content-type", "application/json")
103 .with_body(include_str!("../../assets/resource-not-found.json"))
104 .create_async()
105 .await;
106
107 let client = Client::<ReqwestClient>::builder()
108 .with_api_key("secret".into())
109 .with_base_url(server.url())
110 .build()
111 .unwrap();
112 let err = client.get_company_images(1).await.unwrap_err();
113 let server_err = err.as_server_error().unwrap();
114 assert_eq!(server_err.status_code, 34);
115
116 m.assert_async().await;
117 }
118}
119
120#[cfg(all(test, feature = "integration"))]
121mod integration_tests {
122 use crate::client::Client;
123 use crate::client::reqwest::Client as ReqwestClient;
124
125 #[tokio::test]
126 async fn execute() {
127 let secret = std::env::var("TMDB_TOKEN_V3").unwrap();
128 let client = Client::<ReqwestClient>::new(secret);
129 let result = client.get_company_images(1).await.unwrap();
130 assert!(!result.logos.is_empty());
131 }
132}