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::Client as ReqwestClient;
9    ///
10    /// #[tokio::main]
11    /// async fn main() {
12    ///     let client = Client::<ReqwestClient>::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 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}