tmdb_api/configuration/
jobs.rs

1//! https://developer.themoviedb.org/reference/configuration-jobs
2
3use crate::client::Executor;
4
5#[derive(Debug, Deserialize)]
6pub struct Job {
7    pub department: String,
8    pub jobs: Vec<String>,
9}
10
11impl<E: Executor> crate::Client<E> {
12    /// Get a list of all jobs
13    ///
14    /// ```rust
15    /// use tmdb_api::client::Client;
16    /// use tmdb_api::client::reqwest::Client as ReqwestClient;
17    ///
18    /// #[tokio::main]
19    /// async fn main() {
20    ///     let client = Client::<ReqwestClient>::new("this-is-my-secret-token".into());
21    ///     match client.list_jobs().await {
22    ///         Ok(res) => println!("found: {:#?}", res),
23    ///         Err(err) => eprintln!("error: {:?}", err),
24    ///     };
25    /// }
26    /// ```
27    pub async fn list_jobs(&self) -> crate::Result<Vec<Job>> {
28        self.execute::<Vec<Job>, _>("/configuration/jobs", &())
29            .await
30    }
31}
32
33#[cfg(test)]
34mod tests {
35    use mockito::Matcher;
36
37    use crate::Client;
38    use crate::client::reqwest::Client as ReqwestClient;
39
40    #[tokio::test]
41    async fn it_works() {
42        let mut server = mockito::Server::new_async().await;
43        let m = server
44            .mock("GET", "/configuration/jobs")
45            .match_query(Matcher::UrlEncoded("api_key".into(), "secret".into()))
46            .with_status(200)
47            .with_header("content-type", "application/json")
48            .with_body(include_str!("../../assets/configuration-jobs.json"))
49            .create_async()
50            .await;
51
52        let client = Client::<ReqwestClient>::builder()
53            .with_api_key("secret".into())
54            .with_base_url(server.url())
55            .build()
56            .unwrap();
57
58        let result = client.list_jobs().await.unwrap();
59        assert!(!result.is_empty());
60        m.assert_async().await;
61    }
62
63    #[tokio::test]
64    async fn invalid_api_key() {
65        let mut server = mockito::Server::new_async().await;
66        let m = server
67            .mock("GET", "/configuration/jobs")
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 client = Client::<ReqwestClient>::builder()
76            .with_api_key("secret".into())
77            .with_base_url(server.url())
78            .build()
79            .unwrap();
80        let err = client.list_jobs().await.unwrap_err();
81        let server_err = err.as_server_error().unwrap();
82        assert_eq!(server_err.status_code, 7);
83        m.assert_async().await;
84    }
85
86    #[tokio::test]
87    async fn resource_not_found() {
88        let mut server = mockito::Server::new_async().await;
89        let _m = server
90            .mock("GET", "/configuration/jobs")
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 client = Client::<ReqwestClient>::builder()
99            .with_api_key("secret".into())
100            .with_base_url(server.url())
101            .build()
102            .unwrap();
103        let err = client.list_jobs().await.unwrap_err();
104        let server_err = err.as_server_error().unwrap();
105        assert_eq!(server_err.status_code, 34);
106    }
107}
108
109#[cfg(all(test, feature = "integration"))]
110mod integration_tests {
111    use crate::Client;
112    use crate::client::reqwest::Client as ReqwestClient;
113
114    #[tokio::test]
115    async fn execute() {
116        let secret = std::env::var("TMDB_TOKEN_V3").unwrap();
117        let client = Client::<ReqwestClient>::new(secret);
118        let result = client.list_jobs().await.unwrap();
119        assert!(!result.is_empty());
120    }
121}