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