diff options
| author | Teddy Wing | 2017-11-08 00:00:35 +0100 | 
|---|---|---|
| committer | Teddy Wing | 2017-11-08 00:00:35 +0100 | 
| commit | 7144ae81c8d8308b30a8806370e11a35568ebe51 (patch) | |
| tree | 0be88d6e4b106f75b570b3b40e4304e641177d2d /src | |
| parent | 5e217b98734ea852ed2e6c284b0fe295951766b5 (diff) | |
| download | kipper-7144ae81c8d8308b30a8806370e11a35568ebe51.tar.bz2 | |
jenkins.rs: Add `result_from_job`
This method will take a job JSON payload returned from the Jenkins API
(http://jenkins/job/:project/:id/api/json), and return its status,
success, failed, or pending.
A new `JobStatus` type represents the status of jobs.
Diffstat (limited to 'src')
| -rw-r--r-- | src/jenkins.rs | 62 | 
1 files changed, 62 insertions, 0 deletions
| diff --git a/src/jenkins.rs b/src/jenkins.rs index 609fa37..428b561 100644 --- a/src/jenkins.rs +++ b/src/jenkins.rs @@ -20,10 +20,19 @@  // fn request_job(url)  // fn result_from_job(payload) +extern crate json;  extern crate reqwest;  use self::reqwest::header::{Authorization, Basic}; +#[derive(Debug, PartialEq, Eq)] +pub enum JobStatus { +    Success, +    Failure, +    Pending, +    Unknown, +} +  pub fn auth_credentials() -> Basic {      Basic {          username: "username".to_string(), @@ -44,6 +53,24 @@ pub fn get_jobs(repo_name: String) {//-> Vec<String> {      println!("{}", res.status());  } +pub fn result_from_job(payload: String) -> JobStatus { +    let mut job = json::parse(payload.as_ref()).unwrap(); + +    if job["result"].is_null() { +        return JobStatus::Pending +    } + +    let status = job["result"].take_string().unwrap(); + +    if status == "SUCCESS" { +        JobStatus::Success +    } else if status == "FAILURE" { +        JobStatus::Failure +    } else { +        JobStatus::Unknown +    } +} +  #[cfg(test)]  mod tests { @@ -53,4 +80,39 @@ mod tests {      fn get_jobs_queries_jobs_from_jenkins_api() {          get_jobs("changes".to_string());      } + +    #[test] +    fn result_from_job_is_success() { +        let payload = r#"{ +            "result": "SUCCESS" +        }"#; + +        assert_eq!( +            result_from_job(payload.to_owned()), +            JobStatus::Success +        ); +    } + +    #[test] +    fn result_from_job_is_failure() { +        let payload = r#"{ +            "result": "FAILURE" +        }"#; + +        assert_eq!( +            result_from_job(payload.to_owned()), +            JobStatus::Failure +        ); +    } + +    #[test] +    fn result_from_job_is_pending() { +        let payload = r#"{ +        }"#; + +        assert_eq!( +            result_from_job(payload.to_owned()), +            JobStatus::Pending +        ); +    }  } | 
