tmdb_api/movie/
latest.rs

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