tmdb_api/company/
details.rs

1use crate::client::Executor;
2
3impl<E: Executor> crate::Client<E> {
4    /// Command to get details of a company
5    ///
6    /// ```rust
7    /// use tmdb_api::client::Client;
8    /// use tmdb_api::client::reqwest::ReqwestExecutor;
9    ///
10    /// #[tokio::main]
11    /// async fn main() {
12    ///     let client = Client::<ReqwestExecutor>::new("this-is-my-secret-token".into());
13    ///     match client.get_company_details(1).await {
14    ///         Ok(res) => println!("found: {:#?}", res),
15    ///         Err(err) => eprintln!("error: {:?}", err),
16    ///     };
17    /// }
18    /// ```
19    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::ReqwestExecutor;
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::<ReqwestExecutor>::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::<ReqwestExecutor>::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::<ReqwestExecutor>::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::ReqwestExecutor;
107
108    #[tokio::test]
109    async fn execute() {
110        let secret = std::env::var("TMDB_TOKEN_V3").unwrap();
111        let client = Client::<ReqwestExecutor>::new(secret);
112
113        let result = client.get_company_details(1).await.unwrap();
114        assert_eq!(result.inner.id, 1);
115    }
116}