tmdb_api/company/
alternative_names.rs

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