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 mockito::Matcher;
45
46 use crate::client::Client;
47 use crate::client::reqwest::Client as ReqwestClient;
48
49 #[tokio::test]
50 async fn it_works() {
51 let mut server = mockito::Server::new_async().await;
52 let m = server
53 .mock("GET", "/company/1/images")
54 .match_query(Matcher::UrlEncoded("api_key".into(), "secret".into()))
55 .with_status(200)
56 .with_header("content-type", "application/json")
57 .with_body(include_str!("../../assets/company-images.json"))
58 .create_async()
59 .await;
60
61 let client = Client::<ReqwestClient>::builder()
62 .with_api_key("secret".into())
63 .with_base_url(server.url())
64 .build()
65 .unwrap();
66 let result = client.get_company_images(1).await.unwrap();
67 assert_eq!(result.logos.len(), 2);
68
69 m.assert_async().await;
70 }
71
72 #[tokio::test]
73 async fn invalid_api_key() {
74 let mut server = mockito::Server::new_async().await;
75 let m = server
76 .mock("GET", "/company/1/images")
77 .match_query(Matcher::UrlEncoded("api_key".into(), "secret".into()))
78 .with_status(401)
79 .with_header("content-type", "application/json")
80 .with_body(include_str!("../../assets/invalid-api-key.json"))
81 .create_async()
82 .await;
83
84 let client = Client::<ReqwestClient>::builder()
85 .with_api_key("secret".into())
86 .with_base_url(server.url())
87 .build()
88 .unwrap();
89 let err = client.get_company_images(1).await.unwrap_err();
90 let server_err = err.as_server_error().unwrap();
91 assert_eq!(server_err.status_code, 7);
92
93 m.assert_async().await;
94 }
95
96 #[tokio::test]
97 async fn resource_not_found() {
98 let mut server = mockito::Server::new_async().await;
99 let m = server
100 .mock("GET", "/company/1/images")
101 .match_query(Matcher::UrlEncoded("api_key".into(), "secret".into()))
102 .with_status(404)
103 .with_header("content-type", "application/json")
104 .with_body(include_str!("../../assets/resource-not-found.json"))
105 .create_async()
106 .await;
107
108 let client = Client::<ReqwestClient>::builder()
109 .with_api_key("secret".into())
110 .with_base_url(server.url())
111 .build()
112 .unwrap();
113 let err = client.get_company_images(1).await.unwrap_err();
114 let server_err = err.as_server_error().unwrap();
115 assert_eq!(server_err.status_code, 34);
116
117 m.assert_async().await;
118 }
119}
120
121#[cfg(all(test, feature = "integration"))]
122mod integration_tests {
123 use crate::client::Client;
124 use crate::client::reqwest::Client as ReqwestClient;
125
126 #[tokio::test]
127 async fn execute() {
128 let secret = std::env::var("TMDB_TOKEN_V3").unwrap();
129 let client = Client::<ReqwestClient>::new(secret);
130 let result = client.get_company_images(1).await.unwrap();
131 assert!(!result.logos.is_empty());
132 }
133}