tmdb_api/tvshow/
keywords.rs

1//! https://developer.themoviedb.org/reference/tv-series-keywords
2
3use crate::common::{EntityResults, keyword::Keyword};
4
5pub type Response = EntityResults<Vec<Keyword>>;
6
7impl<E: crate::client::Executor> crate::Client<E> {
8    /// Get tvshow keywords
9    ///
10    /// ```rust
11    /// use tmdb_api::client::Client;
12    /// use tmdb_api::client::reqwest::Client as ReqwestClient;
13    ///
14    /// #[tokio::main]
15    /// async fn main() {
16    ///     let client = Client::<ReqwestClient>::new("this-is-my-secret-token".into());
17    ///     match client.get_tvshow_keywords(42).await {
18    ///         Ok(res) => println!("found: {:#?}", res),
19    ///         Err(err) => eprintln!("error: {:?}", err),
20    ///     };
21    /// }
22    /// ```
23    pub async fn get_tvshow_keywords(&self, tvshow_id: u64) -> crate::Result<Response> {
24        let url = format!("/tv/{tvshow_id}/keywords");
25        self.execute(&url, &()).await
26    }
27}
28
29#[cfg(test)]
30mod tests {
31    use crate::Client;
32    use crate::client::reqwest::Client as ReqwestClient;
33    use mockito::Matcher;
34
35    #[tokio::test]
36    async fn it_works() {
37        let mut server = mockito::Server::new_async().await;
38        let client = Client::<ReqwestClient>::builder()
39            .with_api_key("secret".into())
40            .with_base_url(server.url())
41            .build()
42            .unwrap();
43
44        let _m = server
45            .mock("GET", "/tv/1399/keywords")
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/tv-keywords.json"))
50            .create_async()
51            .await;
52
53        let result = client.get_tvshow_keywords(1399).await.unwrap();
54        assert!(!result.results.is_empty());
55    }
56
57    #[tokio::test]
58    async fn invalid_api_key() {
59        let mut server = mockito::Server::new_async().await;
60        let client = Client::<ReqwestClient>::builder()
61            .with_api_key("secret".into())
62            .with_base_url(server.url())
63            .build()
64            .unwrap();
65
66        let _m = server
67            .mock("GET", "/tv/1399/keywords")
68            .match_query(Matcher::UrlEncoded("api_key".into(), "secret".into()))
69            .with_status(401)
70            .with_header("content-type", "application/json")
71            .with_body(include_str!("../../assets/invalid-api-key.json"))
72            .create_async()
73            .await;
74
75        let err = client.get_tvshow_keywords(1399).await.unwrap_err();
76        let server_err = err.as_server_error().unwrap();
77        assert_eq!(server_err.status_code, 7);
78    }
79
80    #[tokio::test]
81    async fn resource_not_found() {
82        let mut server = mockito::Server::new_async().await;
83        let client = Client::<ReqwestClient>::builder()
84            .with_api_key("secret".into())
85            .with_base_url(server.url())
86            .build()
87            .unwrap();
88
89        let _m = server
90            .mock("GET", "/tv/1399/keywords")
91            .match_query(Matcher::UrlEncoded("api_key".into(), "secret".into()))
92            .with_status(404)
93            .with_header("content-type", "application/json")
94            .with_body(include_str!("../../assets/resource-not-found.json"))
95            .create_async()
96            .await;
97
98        let err = client.get_tvshow_keywords(1399).await.unwrap_err();
99        let server_err = err.as_server_error().unwrap();
100        assert_eq!(server_err.status_code, 34);
101    }
102}
103
104#[cfg(all(test, feature = "integration"))]
105mod integration_tests {
106    use crate::Client;
107    use crate::client::reqwest::Client as ReqwestClient;
108
109    #[tokio::test]
110    async fn execute() {
111        let secret = std::env::var("TMDB_TOKEN_V3").unwrap();
112        let client = Client::<ReqwestClient>::new(secret);
113
114        let result = client.get_tvshow_keywords(1399).await.unwrap();
115        assert!(!result.results.is_empty());
116    }
117}