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> {
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}