tmdb_api/configuration/
languages.rs1use crate::client::Executor;
4
5#[derive(Debug, Deserialize)]
6pub struct Language {
7 pub iso_639_1: String,
8 pub english_name: String,
9 pub name: String,
11}
12
13impl<E: Executor> crate::Client<E> {
14 pub async fn list_languages(&self) -> crate::Result<Vec<Language>> {
30 self.execute("/configuration/languages", &()).await
31 }
32}
33
34#[cfg(test)]
35mod tests {
36 use mockito::Matcher;
37
38 use crate::Client;
39 use crate::client::reqwest::Client as ReqwestClient;
40
41 #[tokio::test]
42 async fn it_works() {
43 let mut server = mockito::Server::new_async().await;
44 let m = server
45 .mock("GET", "/configuration/languages")
46 .match_query(Matcher::UrlEncoded("api_key".into(), "secret".into()))
47 .with_status(200)
48 .with_header("content-type", "application/json")
49 .with_body(include_str!("../../assets/configuration-languages.json"))
50 .create_async()
51 .await;
52
53 let client = Client::<ReqwestClient>::builder()
54 .with_api_key("secret".into())
55 .with_base_url(server.url())
56 .build()
57 .unwrap();
58 let result = client.list_languages().await.unwrap();
59 assert!(!result.is_empty());
60
61 m.assert_async().await;
62 }
63
64 #[tokio::test]
65 async fn invalid_api_key() {
66 let mut server = mockito::Server::new_async().await;
67 let m = server
68 .mock("GET", "/configuration/languages")
69 .match_query(Matcher::UrlEncoded("api_key".into(), "secret".into()))
70 .with_status(401)
71 .with_header("content-type", "application/json")
72 .with_body(include_str!("../../assets/invalid-api-key.json"))
73 .create_async()
74 .await;
75
76 let client = Client::<ReqwestClient>::builder()
77 .with_api_key("secret".into())
78 .with_base_url(server.url())
79 .build()
80 .unwrap();
81
82 let err = client.list_languages().await.unwrap_err();
83 let server_err = err.as_server_error().unwrap();
84 assert_eq!(server_err.status_code, 7);
85
86 m.assert_async().await;
87 }
88
89 #[tokio::test]
90 async fn resource_not_found() {
91 let mut server = mockito::Server::new_async().await;
92 let m = server
93 .mock("GET", "/configuration/languages")
94 .match_query(Matcher::UrlEncoded("api_key".into(), "secret".into()))
95 .with_status(404)
96 .with_header("content-type", "application/json")
97 .with_body(include_str!("../../assets/resource-not-found.json"))
98 .create_async()
99 .await;
100
101 let client = Client::<ReqwestClient>::builder()
102 .with_api_key("secret".into())
103 .with_base_url(server.url())
104 .build()
105 .unwrap();
106 let err = client.list_languages().await.unwrap_err();
107 let server_err = err.as_server_error().unwrap();
108 assert_eq!(server_err.status_code, 34);
109
110 m.assert_async().await;
111 }
112}
113
114#[cfg(all(test, feature = "integration"))]
115mod integration_tests {
116 use crate::Client;
117 use crate::client::reqwest::Client as ReqwestClient;
118
119 #[tokio::test]
120 async fn execute() {
121 let secret = std::env::var("TMDB_TOKEN_V3").unwrap();
122 let client = Client::<ReqwestClient>::new(secret);
123 let result = client.list_languages().await.unwrap();
124 assert!(!result.is_empty());
125 }
126}