tmdb_api/tvshow/
latest.rs1pub type Params<'a> = crate::common::LanguageParams<'a>;
2
3impl<E: crate::client::Executor> crate::Client<E> {
4 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::Client as ReqwestClient;
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::<ReqwestClient>::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::<ReqwestClient>::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::<ReqwestClient>::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::Client as ReqwestClient;
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::<ReqwestClient>::new(secret);
115
116 let _result = client.get_latest_tvshow(&Default::default()).await.unwrap();
117 }
118}