tmdb_api/configuration/
jobs.rs1use 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 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}