tmdb_api/company/
alternative_names.rs

1use crate::{client::Executor, common::EntityResults};
2
3pub type Response = EntityResults<Vec<CompanyAlternativeName>>;
4
5#[derive(Debug, Deserialize, Serialize)]
6pub struct CompanyAlternativeName {
7    pub name: String,
8    #[serde(
9        deserialize_with = "crate::util::empty_string::deserialize",
10        rename = "type"
11    )]
12    pub kind: Option<String>,
13}
14
15impl<E: Executor> crate::Client<E> {
16    /// Command to get the company alternative names
17    ///
18    /// ```rust
19    /// use tmdb_api::client::Client;
20    /// use tmdb_api::client::reqwest::Client as ReqwestClient;
21    ///
22    /// #[tokio::main]
23    /// async fn main() {
24    ///     let client = Client::<ReqwestClient>::new("this-is-my-secret-token".into());
25    ///     match client.get_company_alternative_names(1).await {
26    ///         Ok(res) => println!("found: {:#?}", res),
27    ///         Err(err) => eprintln!("error: {:?}", err),
28    ///     };
29    /// }
30    /// ```
31    pub async fn get_company_alternative_names(&self, company_id: u64) -> crate::Result<Response> {
32        let path = format!("/company/{company_id}/alternative_names");
33        self.execute(&path, &()).await
34    }
35}
36
37#[cfg(test)]
38mod tests {
39    use crate::client::Client;
40    use crate::client::reqwest::Client as ReqwestClient;
41    use mockito::Matcher;
42
43    #[tokio::test]
44    async fn it_works() {
45        let mut server = mockito::Server::new_async().await;
46        let m = server
47            .mock("GET", "/company/1/alternative_names")
48            .match_query(Matcher::UrlEncoded("api_key".into(), "secret".into()))
49            .with_status(200)
50            .with_header("content-type", "application/json")
51            .with_body(include_str!("../../assets/company-alternative-names.json"))
52            .create_async()
53            .await;
54
55        let client = Client::<ReqwestClient>::builder()
56            .with_api_key("secret".into())
57            .with_base_url(server.url())
58            .build()
59            .unwrap();
60        let result = client.get_company_alternative_names(1).await.unwrap();
61        assert!(!result.results.is_empty());
62
63        m.assert_async().await;
64    }
65
66    #[tokio::test]
67    async fn invalid_api_key() {
68        let mut server = mockito::Server::new_async().await;
69        let m = server
70            .mock("GET", "/company/1/alternative_names")
71            .match_query(Matcher::UrlEncoded("api_key".into(), "secret".into()))
72            .with_status(401)
73            .with_header("content-type", "application/json")
74            .with_body(include_str!("../../assets/invalid-api-key.json"))
75            .create_async()
76            .await;
77
78        let client = Client::<ReqwestClient>::builder()
79            .with_api_key("secret".into())
80            .with_base_url(server.url())
81            .build()
82            .unwrap();
83        let err = client.get_company_alternative_names(1).await.unwrap_err();
84        let server_err = err.as_server_error().unwrap();
85        assert_eq!(server_err.status_code, 7);
86
87        m.assert_async().await;
88    }
89
90    #[tokio::test]
91    async fn resource_not_found() {
92        let mut server = mockito::Server::new_async().await;
93        let m = server
94            .mock("GET", "/company/1/alternative_names")
95            .match_query(Matcher::UrlEncoded("api_key".into(), "secret".into()))
96            .with_status(404)
97            .with_header("content-type", "application/json")
98            .with_body(include_str!("../../assets/resource-not-found.json"))
99            .create_async()
100            .await;
101
102        let client = Client::<ReqwestClient>::builder()
103            .with_api_key("secret".into())
104            .with_base_url(server.url())
105            .build()
106            .unwrap();
107        let err = client.get_company_alternative_names(1).await.unwrap_err();
108        let server_err = err.as_server_error().unwrap();
109        assert_eq!(server_err.status_code, 34);
110
111        m.assert_async().await;
112    }
113}
114
115#[cfg(all(test, feature = "integration"))]
116mod integration_tests {
117    use crate::client::Client;
118    use crate::client::reqwest::Client as ReqwestClient;
119
120    #[tokio::test]
121    async fn execute() {
122        let secret = std::env::var("TMDB_TOKEN_V3").unwrap();
123        let client = Client::<ReqwestClient>::new(secret);
124        let result = client.get_company_alternative_names(1).await.unwrap();
125        assert!(!result.results.is_empty());
126        assert_eq!(result.id, 1);
127    }
128}