tmdb_api/tvshow/
latest.rs

1pub type Params<'a> = crate::common::LanguageParams<'a>;
2
3impl<E: crate::client::Executor> crate::Client<E> {
4    /// Get the most newly created show. This is a live response and will
5    /// continuously change.
6    ///
7    /// ```rust
8    /// use tmdb_api::client::Client;
9    /// use tmdb_api::client::reqwest::Client as ReqwestClient;
10    ///
11    /// #[tokio::main]
12    /// async fn main() {
13    ///     let client = Client::<ReqwestClient>::new("this-is-my-secret-token".into());
14    ///     match client.get_latest_tvshow(&Default::default()).await {
15    ///         Ok(res) => println!("found: {:#?}", res),
16    ///         Err(err) => eprintln!("error: {:?}", err),
17    ///     };
18    /// }
19    /// ```
20    pub async fn get_latest_tvshow(&self, params: &Params<'_>) -> crate::Result<super::TVShow> {
21        self.execute("/tv/latest", params).await
22    }
23}
24
25#[cfg(test)]
26mod tests {
27    use mockito::Matcher;
28
29    use crate::client::Client;
30    use crate::client::reqwest::Client as ReqwestClient;
31
32    #[tokio::test]
33    async fn it_works() {
34        let mut server = mockito::Server::new_async().await;
35        let client = Client::<ReqwestClient>::builder()
36            .with_api_key("secret".into())
37            .with_base_url(server.url())
38            .build()
39            .unwrap();
40
41        let _m = server
42            .mock("GET", "/tv/latest")
43            .match_query(Matcher::UrlEncoded("api_key".into(), "secret".into()))
44            .with_status(200)
45            .with_header("content-type", "application/json")
46            .with_body(include_str!("../../assets/tv-latest.json"))
47            .create_async()
48            .await;
49
50        let result = client.get_latest_tvshow(&Default::default()).await.unwrap();
51        assert_eq!(result.inner.id, 1399);
52    }
53
54    #[tokio::test]
55    async fn invalid_api_key() {
56        let mut server = mockito::Server::new_async().await;
57        let client = Client::<ReqwestClient>::builder()
58            .with_api_key("secret".into())
59            .with_base_url(server.url())
60            .build()
61            .unwrap();
62
63        let _m = server
64            .mock("GET", "/tv/latest")
65            .match_query(Matcher::UrlEncoded("api_key".into(), "secret".into()))
66            .with_status(401)
67            .with_header("content-type", "application/json")
68            .with_body(include_str!("../../assets/invalid-api-key.json"))
69            .create_async()
70            .await;
71
72        let err = client
73            .get_latest_tvshow(&Default::default())
74            .await
75            .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/latest")
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
99            .get_latest_tvshow(&Default::default())
100            .await
101            .unwrap_err();
102        let server_err = err.as_server_error().unwrap();
103        assert_eq!(server_err.status_code, 34);
104    }
105}
106
107#[cfg(all(test, feature = "integration"))]
108mod integration_tests {
109    use crate::client::Client;
110    use crate::client::reqwest::Client as ReqwestClient;
111
112    #[tokio::test]
113    #[ignore = "The API doesn't work as expected. For history: https://www.themoviedb.org/talk/65b3e54e5541fa0164b18674"]
114    async fn execute() {
115        let secret = std::env::var("TMDB_TOKEN_V3").unwrap();
116        let client = Client::<ReqwestClient>::new(secret);
117
118        let _result = client.get_latest_tvshow(&Default::default()).await.unwrap();
119    }
120}