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