Unify ArtifactFilter returned by server 14/188914/6
authorAlexander Mazuruk <a.mazuruk@samsung.com>
Tue, 11 Sep 2018 16:19:53 +0000 (18:19 +0200)
committerPawel Wieczorek <p.wieczorek2@samsung.com>
Tue, 18 Sep 2018 13:44:42 +0000 (15:44 +0200)
Due to how json array marshalling works in go:

Having following struct:

type A struct{
    Key1 []string
    Key2 []string
}

When following empty JSON was sent:
{ Key1: [], Key2: [] }

We would receive a struct:
Key1, Key2 - one element slice with empty string

If we would send:
{ Key2: [] }

We would receive a struct:
Key1 - empty slice
Key2 - one element slice with empty string

This commit unifies empty values returned by server to always be empty
slice.

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

index f1d447e..9d0cd02 100644 (file)
@@ -31,10 +31,7 @@ func (a *APIDefaults) ArtifactLister(params artifacts.ArtifactListerParams) midd
                }
                paginator = setArtifactPaginator(params, a.PageLimit)
        }
-       filter := weles.ArtifactFilter{}
-       if params.ArtifactFilterAndSort.Filter != nil {
-               filter = *params.ArtifactFilterAndSort.Filter
-       }
+       filter := setArtifactFilter(params.ArtifactFilterAndSort.Filter)
        sorter := setArtifactSorter(params.ArtifactFilterAndSort.Sorter)
 
        artifactInfoReceived, listInfo, err := a.Managers.AM.ListArtifact(filter, sorter, paginator)
@@ -123,6 +120,32 @@ func responderArtifact200(listInfo weles.ListInfo, paginator weles.ArtifactPagin
        return
 }
 
+// setArtifactFilter adjusts filter's 0 values to be consistent and acceptable by the artifacts db
+// That is []string with only 1 empty element should be removed.
+func setArtifactFilter(fi *weles.ArtifactFilter) (fo weles.ArtifactFilter) {
+       if fi != nil {
+               if len(fi.JobID) > 0 {
+                       fo.JobID = fi.JobID
+               }
+               if len(fi.Alias) > 0 {
+                       if !(len(fi.Alias) == 1 && fi.Alias[0] == "") {
+                               fo.Alias = fi.Alias
+                       }
+               }
+               if len(fi.Status) > 0 {
+                       if !(len(fi.Status) == 1 && fi.Status[0] == "") {
+                               fo.Status = fi.Status
+                       }
+               }
+               if len(fi.Type) > 0 {
+                       if !(len(fi.Type) == 1 && fi.Type[0] == "") {
+                               fo.Type = fi.Type
+                       }
+               }
+       }
+       return
+}
+
 // setArtifactSorter sets default sorter values.
 func setArtifactSorter(si *weles.ArtifactSorter) (so weles.ArtifactSorter) {
        if si == nil {