Unify JobFilter returned by server 34/189434/2
authorAlexander Mazuruk <a.mazuruk@samsung.com>
Mon, 17 Sep 2018 15:20:38 +0000 (17:20 +0200)
committerPawel Wieczorek <p.wieczorek2@samsung.com>
Tue, 18 Sep 2018 13:46:51 +0000 (15:46 +0200)
Further description in job_lister_handler.go file and Unify
ArtifactFilter returned by server commit.

Change-Id: Ieda839e30ee6be96187cb9551f9b4cb768298db9
Signed-off-by: Alexander Mazuruk <a.mazuruk@samsung.com>
server/job_lister_handler.go
server/job_lister_handler_test.go

index 0a2a662..03c4fa9 100644 (file)
@@ -15,6 +15,8 @@
 package server
 
 import (
+       "time"
+
        "github.com/go-openapi/runtime/middleware"
 
        "git.tizen.org/tools/weles"
@@ -31,10 +33,7 @@ func (a *APIDefaults) JobLister(params jobs.JobListerParams) middleware.Responde
                }
                paginator = setJobPaginator(params, a.PageLimit)
        }
-       filter := weles.JobFilter{}
-       if params.JobFilterAndSort.Filter != nil {
-               filter = *params.JobFilterAndSort.Filter
-       }
+       filter := setJobFilter(params.JobFilterAndSort.Filter)
        sorter := setJobSorter(params.JobFilterAndSort.Sorter)
 
        jobInfoReceived, listInfo, err := a.Managers.JM.ListJobs(filter, sorter, paginator)
@@ -127,6 +126,50 @@ func responder200(listInfo weles.ListInfo, paginator weles.JobPagination,
        return
 }
 
+// setJobFilter adjusts filter's 0 values to be consistent and acceptable by controller.
+// This is:
+// for strfmt.DateTime elements normalizing 0 time as (0001-01-01T00:00:00.000Z) instead of
+// Unix 0- 1970-01-01T00:00:00.000Z
+// Controller treats slices with 0 len as empty, slices with lenght of 1 and empty value should not
+// be passed to controller.
+func setJobFilter(i *weles.JobFilter) (o weles.JobFilter) {
+       if i != nil {
+               if time.Time(i.CreatedBefore).Unix() != 0 {
+                       o.CreatedBefore = i.CreatedBefore
+               }
+               if time.Time(i.CreatedAfter).Unix() != 0 {
+                       o.CreatedAfter = i.CreatedAfter
+               }
+               if time.Time(i.UpdatedBefore).Unix() != 0 {
+                       o.UpdatedBefore = i.UpdatedBefore
+               }
+               if time.Time(i.UpdatedAfter).Unix() != 0 {
+                       o.UpdatedAfter = i.UpdatedAfter
+               }
+               if len(i.JobID) > 0 {
+                       if !(len(i.JobID) == 1 && i.JobID[0] == 0) {
+                               o.JobID = i.JobID
+                       }
+               }
+               if len(i.Info) > 0 {
+                       if !(len(i.Info) == 1 && i.Info[0] == "") {
+                               o.Info = i.Info
+                       }
+               }
+               if len(i.Name) > 0 {
+                       if !(len(i.Name) == 1 && i.Name[0] == "") {
+                               o.Name = i.Name
+                       }
+               }
+               if len(i.Status) > 0 {
+                       if !(len(i.Status) == 1 && i.Status[0] == "") {
+                               o.Status = i.Status
+                       }
+               }
+       }
+       return
+}
+
 func setJobPaginator(params jobs.JobListerParams, defaultPageLimit int32,
 ) (paginator weles.JobPagination) {
        paginator.Forward = true
index 11847cd..41f74af 100644 (file)
@@ -435,6 +435,7 @@ var _ = Describe("JobListerHandler", func() {
                                                filter, sorter, paginator2).Return(jobInfo2, listInfo2, nil).After(first)
 
                                        client2 := testserver.Client()
+                                       reqBody = filterSorterReqBody(filter, sorter, JSON)
                                        req2 := createRequest(reqBody, nextPage, "", JSON, JSON)
                                        req2.Close = true
                                        resp2, err := client2.Do(req2)
@@ -603,6 +604,7 @@ var _ = Describe("JobListerHandler", func() {
                                        mockJobManager.EXPECT().ListJobs(
                                                filter, sorter, paginator2).Return(jobInfo2, listInfo2, nil).After(first)
                                        client2 := testserver.Client()
+                                       reqBody = filterSorterReqBody(filter, sorter, JSON)
                                        req2 := createRequest(reqBody, prevPage, "", JSON, JSON)
                                        req2.Close = true
                                        resp2, err := client2.Do(req2)