diff --git a/client/client.go b/client/client.go index ee34497..af30fd6 100644 --- a/client/client.go +++ b/client/client.go @@ -59,7 +59,7 @@ func (client *Client) NewRequestWithBody(method string, path string, data interf if err != nil { return nil, err } - req.Header.Add("Content-Type", "text/xml;charset=UTF-8") + req.Header.Add("Content-Type", "application/xml;charset=UTF-8") return req, nil } diff --git a/client/job_config.go b/client/job_config.go index 96e12a8..e52200d 100644 --- a/client/job_config.go +++ b/client/job_config.go @@ -1,7 +1,10 @@ package client +import "encoding/xml" + // JobConfig type JobConfig struct { + XMLName xml.Name `xml:"flow-definition"` // actions Description string `xml:"description"` // keepDependencies diff --git a/client/job_service.go b/client/job_service.go index e123c1c..6b64e77 100644 --- a/client/job_service.go +++ b/client/job_service.go @@ -13,6 +13,10 @@ type JobsResponse struct { Jobs *[]*Job `xml:"job"` } +func fullName(folder string, jobName string) string { + return fmt.Sprintf("%s/job/%s", folder, jobName) +} + // GetJobs get all jobs func (service *JobService) GetJobs() (*[]*Job, error) { path := "/api/xml?tree=jobs[name]" @@ -30,10 +34,8 @@ func (service *JobService) GetJobs() (*[]*Job, error) { return response.Jobs, nil } -func (service *JobService) GetJob(jobName string) (*Job, error) { - path := fmt.Sprintf( - "/job/%s/api/xml", - jobName) +func (service *JobService) GetJob(folder, jobName string) (*Job, error) { + path := fmt.Sprintf("/%s/api/xml", fullName(folder, jobName)) req, err := service.NewRequest("GET", path) if err != nil { return nil, err @@ -48,10 +50,8 @@ func (service *JobService) GetJob(jobName string) (*Job, error) { return &response, nil } -func (service *JobService) GetJobConfig(jobName string) (*JobConfig, error) { - path := fmt.Sprintf( - "/job/%s/config.xml", - jobName) +func (service *JobService) GetJobConfig(folder string, jobName string) (*JobConfig, error) { + path := fmt.Sprintf("/%s/config.xml", fullName(folder, jobName)) req, err := service.NewRequest("GET", path) if err != nil { return nil, err @@ -65,3 +65,48 @@ func (service *JobService) GetJobConfig(jobName string) (*JobConfig, error) { return &response, nil } + +func (service *JobService) CreateJob(folder string, jobName string, config *JobConfig) error { + path := fmt.Sprintf("/%s/createItem?name=%s", folder, jobName) + req, err := service.NewRequestWithBody("POST", path, config) + if err != nil { + return err + } + + _, respErr := service.Do(req) + if respErr != nil { + return respErr + } + + return nil +} + +func (service *JobService) UpdateJob(folder string, jobName string, jobConfig *JobConfig) error { + path := fmt.Sprintf("/%s/config.xml", fullName(folder, jobName)) + req, err := service.NewRequestWithBody("POST", path, jobConfig) + if err != nil { + return err + } + + _, respErr := service.Do(req) + if respErr != nil { + return respErr + } + + return nil +} + +func (service *JobService) DeleteJob(folder string, jobName string) error { + path := fmt.Sprintf("/%s/doDelete", fullName(folder, jobName)) + req, err := service.NewRequest("POST", path) + if err != nil { + return err + } + + _, respErr := service.Do(req) + if respErr != nil { + return respErr + } + + return nil +} diff --git a/client/job_service_test.go b/client/job_service_test.go index a7a6f39..a14d5fd 100644 --- a/client/job_service_test.go +++ b/client/job_service_test.go @@ -6,6 +6,8 @@ import ( var jobService *JobService +const folder string = "job/Bridge%20Career" + func init() { // rand.Seed(time.Now().UTC().UnixNano()) jobService = &JobService{newTestClient()} @@ -23,7 +25,7 @@ func TestGetJobs(t *testing.T) { } func TestGetJob(t *testing.T) { - jobConfig, err := jobService.GetJob("Bridge%20Career/job/migrations") + jobConfig, err := jobService.GetJob(folder, "migrations") if err != nil { t.Fatal(err) } @@ -33,8 +35,28 @@ func TestGetJob(t *testing.T) { } } +func TestCreateJob(t *testing.T) { + name := "my_test_job" + config := JobConfig{} + err := jobService.CreateJob("job/Bridge%20Career/", name, &config) + if err != nil { + t.Fatal(err) + } + + config.Description = "my new desc 3" + err = jobService.UpdateJob(folder, name, &config) + if err != nil { + t.Fatal(err) + } + + err = jobService.DeleteJob("job/Bridge%20Career/", name) + if err != nil { + t.Fatal(err) + } +} + func TestGetJobConfig(t *testing.T) { - jobConfig, err := jobService.GetJobConfig("Bridge%20Career/job/migrations") + jobConfig, err := jobService.GetJobConfig(folder, "migrations") if err != nil { t.Fatal(err) }