tmdb_api/company/
details.rs1use crate::client::Executor;
2
3impl<E: Executor> crate::Client<E> {
4 pub async fn get_company_details(&self, company_id: u64) -> crate::Result<super::Company> {
20 let path = format!("/company/{company_id}");
21 self.execute::<super::Company, _>(&path, &()).await
22 }
23}
24
25#[cfg(test)]
26mod tests {
27 use crate::client::Client;
28 use crate::client::reqwest::Client as ReqwestClient;
29 use mockito::Matcher;
30
31 #[tokio::test]
32 async fn it_works() {
33 let mut server = mockito::Server::new_async().await;
34 let m = server
35 .mock("GET", "/company/1")
36 .match_query(Matcher::UrlEncoded("api_key".into(), "secret".into()))
37 .with_status(200)
38 .with_header("content-type", "application/json")
39 .with_body(include_str!("../../assets/company-details.json"))
40 .create_async()
41 .await;
42
43 let client = Client::<ReqwestClient>::builder()
44 .with_api_key("secret".into())
45 .with_base_url(server.url())
46 .build()
47 .unwrap();
48 let result = client.get_company_details(1).await.unwrap();
49 assert_eq!(result.inner.id, 1);
50
51 m.assert_async().await;
52 }
53
54 #[tokio::test]
55 async fn invalid_api_key() {
56 let mut server = mockito::Server::new_async().await;
57 let m = server
58 .mock("GET", "/company/1")
59 .match_query(Matcher::UrlEncoded("api_key".into(), "secret".into()))
60 .with_status(401)
61 .with_header("content-type", "application/json")
62 .with_body(include_str!("../../assets/invalid-api-key.json"))
63 .create_async()
64 .await;
65
66 let client = Client::<ReqwestClient>::builder()
67 .with_api_key("secret".into())
68 .with_base_url(server.url())
69 .build()
70 .unwrap();
71 let err = client.get_company_details(1).await.unwrap_err();
72 let server_err = err.as_server_error().unwrap();
73 assert_eq!(server_err.status_code, 7);
74
75 m.assert_async().await;
76 }
77
78 #[tokio::test]
79 async fn resource_not_found() {
80 let mut server = mockito::Server::new_async().await;
81 let m = server
82 .mock("GET", "/company/1")
83 .match_query(Matcher::UrlEncoded("api_key".into(), "secret".into()))
84 .with_status(404)
85 .with_header("content-type", "application/json")
86 .with_body(include_str!("../../assets/resource-not-found.json"))
87 .create_async()
88 .await;
89
90 let client = Client::<ReqwestClient>::builder()
91 .with_api_key("secret".into())
92 .with_base_url(server.url())
93 .build()
94 .unwrap();
95 let err = client.get_company_details(1).await.unwrap_err();
96 let server_err = err.as_server_error().unwrap();
97 assert_eq!(server_err.status_code, 34);
98
99 m.assert_async().await;
100 }
101}
102
103#[cfg(all(test, feature = "integration"))]
104mod integration_tests {
105 use crate::client::Client;
106 use crate::client::reqwest::Client as ReqwestClient;
107
108 #[tokio::test]
109 async fn execute() {
110 let secret = std::env::var("TMDB_TOKEN_V3").unwrap();
111 let client = Client::<ReqwestClient>::new(secret);
112
113 let result = client.get_company_details(1).await.unwrap();
114 assert_eq!(result.inner.id, 1);
115 }
116}