tmdb_api/company/
alternative_names.rs1use std::borrow::Cow;
2
3#[derive(Clone, Debug, Default)]
23pub struct CompanyAlternativeNames {
24 pub company_id: u64,
26}
27
28impl CompanyAlternativeNames {
29 pub fn new(company_id: u64) -> Self {
30 Self { company_id }
31 }
32}
33
34#[derive(Debug, Deserialize, Serialize)]
35pub struct CompanyAlternativeName {
36 pub name: String,
37 #[serde(
38 deserialize_with = "crate::util::empty_string::deserialize",
39 rename = "type"
40 )]
41 pub kind: Option<String>,
42}
43
44#[derive(Debug, Deserialize, Serialize)]
45pub struct CompanyAlternativeNamesResult {
46 pub id: u64,
47 pub results: Vec<CompanyAlternativeName>,
48}
49
50impl crate::prelude::Command for CompanyAlternativeNames {
51 type Output = CompanyAlternativeNamesResult;
52
53 fn path(&self) -> Cow<'static, str> {
54 Cow::Owned(format!("/company/{}/alternative_names", self.company_id))
55 }
56
57 fn params(&self) -> Vec<(&'static str, Cow<'_, str>)> {
58 Vec::new()
59 }
60}
61
62#[cfg(test)]
63mod tests {
64 use super::CompanyAlternativeNames;
65 use crate::client::Client;
66 use crate::client::reqwest::ReqwestExecutor;
67 use crate::prelude::Command;
68 use mockito::Matcher;
69
70 #[tokio::test]
71 async fn it_works() {
72 let mut server = mockito::Server::new_async().await;
73 let client = Client::<ReqwestExecutor>::builder()
74 .with_api_key("secret".into())
75 .with_base_url(server.url())
76 .build()
77 .unwrap();
78
79 let _m = server
80 .mock("GET", "/company/1/alternative_names")
81 .match_query(Matcher::UrlEncoded("api_key".into(), "secret".into()))
82 .with_status(200)
83 .with_header("content-type", "application/json")
84 .with_body(include_str!("../../assets/company-alternative-names.json"))
85 .create_async()
86 .await;
87
88 let result = CompanyAlternativeNames::new(1)
89 .execute(&client)
90 .await
91 .unwrap();
92 assert_eq!(result.id, 1);
93 }
94
95 #[tokio::test]
96 async fn invalid_api_key() {
97 let mut server = mockito::Server::new_async().await;
98 let client = Client::<ReqwestExecutor>::builder()
99 .with_api_key("secret".into())
100 .with_base_url(server.url())
101 .build()
102 .unwrap();
103
104 let _m = server
105 .mock("GET", "/company/1/alternative_names")
106 .match_query(Matcher::UrlEncoded("api_key".into(), "secret".into()))
107 .with_status(401)
108 .with_header("content-type", "application/json")
109 .with_body(include_str!("../../assets/invalid-api-key.json"))
110 .create_async()
111 .await;
112
113 let err = CompanyAlternativeNames::new(1)
114 .execute(&client)
115 .await
116 .unwrap_err();
117 let server_err = err.as_server_error().unwrap();
118 assert_eq!(server_err.status_code, 7);
119 }
120
121 #[tokio::test]
122 async fn resource_not_found() {
123 let mut server = mockito::Server::new_async().await;
124 let client = Client::<ReqwestExecutor>::builder()
125 .with_api_key("secret".into())
126 .with_base_url(server.url())
127 .build()
128 .unwrap();
129
130 let _m = server
131 .mock("GET", "/company/1/alternative_names")
132 .match_query(Matcher::UrlEncoded("api_key".into(), "secret".into()))
133 .with_status(404)
134 .with_header("content-type", "application/json")
135 .with_body(include_str!("../../assets/resource-not-found.json"))
136 .create_async()
137 .await;
138
139 let err = CompanyAlternativeNames::new(1)
140 .execute(&client)
141 .await
142 .unwrap_err();
143 let server_err = err.as_server_error().unwrap();
144 assert_eq!(server_err.status_code, 34);
145 }
146}
147
148#[cfg(all(test, feature = "integration"))]
149mod integration_tests {
150 use super::CompanyAlternativeNames;
151 use crate::client::Client;
152 use crate::client::reqwest::ReqwestExecutor;
153 use crate::prelude::Command;
154
155 #[tokio::test]
156 async fn execute() {
157 let secret = std::env::var("TMDB_TOKEN_V3").unwrap();
158 let client = Client::<ReqwestExecutor>::new(secret);
159
160 let result = CompanyAlternativeNames::new(1)
161 .execute(&client)
162 .await
163 .unwrap();
164 assert_eq!(result.id, 1);
165 }
166}