tmdb_api/tvshow/
popular.rs1use crate::common::PaginatedResult;
2
3pub type Params<'a> = crate::common::LanguagePageParams<'a>;
4
5impl<E: crate::client::Executor> crate::Client<E> {
6 pub async fn list_popular_tvshows(
22 &self,
23 params: &Params<'_>,
24 ) -> crate::Result<PaginatedResult<super::TVShowShort>> {
25 self.execute("/tv/popular", params).await
26 }
27}
28
29#[cfg(test)]
30mod tests {
31 use crate::client::Client;
32 use crate::client::reqwest::ReqwestExecutor;
33 use mockito::Matcher;
34
35 #[tokio::test]
36 async fn it_works() {
37 let mut server = mockito::Server::new_async().await;
38 let client = Client::<ReqwestExecutor>::builder()
39 .with_api_key("secret".into())
40 .with_base_url(server.url())
41 .build()
42 .unwrap();
43
44 let _m = server
45 .mock("GET", "/tv/popular")
46 .match_query(Matcher::UrlEncoded("api_key".into(), "secret".into()))
47 .with_status(200)
48 .with_header("content-type", "application/json")
49 .with_body(include_str!("../../assets/tv-popular.json"))
50 .create_async()
51 .await;
52
53 let result = client
54 .list_popular_tvshows(&Default::default())
55 .await
56 .unwrap();
57 assert_eq!(result.page, 1);
58 }
59
60 #[tokio::test]
61 async fn invalid_api_key() {
62 let mut server = mockito::Server::new_async().await;
63 let client = Client::<ReqwestExecutor>::builder()
64 .with_api_key("secret".into())
65 .with_base_url(server.url())
66 .build()
67 .unwrap();
68
69 let _m = server
70 .mock("GET", "/tv/popular")
71 .match_query(Matcher::UrlEncoded("api_key".into(), "secret".into()))
72 .with_status(401)
73 .with_header("content-type", "application/json")
74 .with_body(include_str!("../../assets/invalid-api-key.json"))
75 .create_async()
76 .await;
77
78 let err = client
79 .list_popular_tvshows(&Default::default())
80 .await
81 .unwrap_err();
82 let server_err = err.as_server_error().unwrap();
83 assert_eq!(server_err.status_code, 7);
84 }
85
86 #[tokio::test]
87 async fn resource_not_found() {
88 let mut server = mockito::Server::new_async().await;
89 let client = Client::<ReqwestExecutor>::builder()
90 .with_api_key("secret".into())
91 .with_base_url(server.url())
92 .build()
93 .unwrap();
94
95 let _m = server
96 .mock("GET", "/tv/popular")
97 .match_query(Matcher::UrlEncoded("api_key".into(), "secret".into()))
98 .with_status(404)
99 .with_header("content-type", "application/json")
100 .with_body(include_str!("../../assets/resource-not-found.json"))
101 .create_async()
102 .await;
103
104 let err = client
105 .list_popular_tvshows(&Default::default())
106 .await
107 .unwrap_err();
108 let server_err = err.as_server_error().unwrap();
109 assert_eq!(server_err.status_code, 34);
110 }
111}
112
113#[cfg(all(test, feature = "integration"))]
114mod integration_tests {
115 use crate::client::Client;
116 use crate::client::reqwest::ReqwestExecutor;
117
118 #[tokio::test]
119 async fn execute() {
120 let secret = std::env::var("TMDB_TOKEN_V3").unwrap();
121 let client = Client::<ReqwestExecutor>::new(secret);
122
123 let _result = client
124 .list_popular_tvshows(&Default::default())
125 .await
126 .unwrap();
127 }
128}