tmdb_api/movie/
release_dates.rs

1use crate::common::EntityResults;
2use crate::common::release_date::LocatedReleaseDates;
3
4pub type Response = EntityResults<Vec<LocatedReleaseDates>>;
5
6impl<E: crate::client::Executor> crate::Client<E> {
7    /// Get the release date along with the certification for a movie.
8    ///
9    /// ```rust
10    /// use tmdb_api::client::Client;
11    /// use tmdb_api::client::reqwest::Client as ReqwestClient;
12    ///
13    /// #[tokio::main]
14    /// async fn main() {
15    ///     let client = Client::<ReqwestClient>::new("this-is-my-secret-token".into());
16    ///     match client.get_movie_release_dates(1).await {
17    ///         Ok(res) => println!("found: {:#?}", res),
18    ///         Err(err) => eprintln!("error: {:?}", err),
19    ///     };
20    /// }
21    /// ```
22    pub async fn get_movie_release_dates(&self, movie_id: u64) -> crate::Result<Response> {
23        let url = format!("/movie/{movie_id}/release_dates");
24        self.execute(&url, &()).await
25    }
26}
27
28#[cfg(test)]
29mod tests {
30    use mockito::Matcher;
31
32    use crate::client::Client;
33    use crate::client::reqwest::Client as ReqwestClient;
34
35    #[tokio::test]
36    async fn it_works() {
37        let mut server = mockito::Server::new_async().await;
38        let client = Client::<ReqwestClient>::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", "/movie/550/release_dates")
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/movie-release-dates.json"))
50            .create_async()
51            .await;
52
53        let result = client.get_movie_release_dates(550).await.unwrap();
54        assert!(!result.results.is_empty());
55    }
56
57    #[tokio::test]
58    async fn invalid_api_key() {
59        let mut server = mockito::Server::new_async().await;
60        let client = Client::<ReqwestClient>::builder()
61            .with_api_key("secret".into())
62            .with_base_url(server.url())
63            .build()
64            .unwrap();
65
66        let _m = server
67            .mock("GET", "/movie/550/release_dates")
68            .match_query(Matcher::UrlEncoded("api_key".into(), "secret".into()))
69            .with_status(401)
70            .with_header("content-type", "application/json")
71            .with_body(include_str!("../../assets/invalid-api-key.json"))
72            .create_async()
73            .await;
74
75        let err = client.get_movie_release_dates(550).await.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", "/movie/550/release_dates")
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.get_movie_release_dates(550).await.unwrap_err();
99        let server_err = err.as_server_error().unwrap();
100        assert_eq!(server_err.status_code, 34);
101    }
102}
103
104#[cfg(all(test, feature = "integration"))]
105mod integration_tests {
106    use crate::client::Client;
107    use crate::client::reqwest::Client as ReqwestClient;
108
109    #[tokio::test]
110    async fn execute() {
111        let secret = std::env::var("TMDB_TOKEN_V3").unwrap();
112        let client = Client::<ReqwestClient>::new(secret);
113        let result = client.get_movie_release_dates(550).await.unwrap();
114        assert!(!result.results.is_empty());
115        assert_eq!(result.id, 550);
116    }
117}