tmdb_api/movie/
release_dates.rs1use 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 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}