tmdb_api/tvshow/
keywords.rs

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