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