tmdb_api/company/
alternative_names.rs1use 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 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}