This is an automated email from the ASF dual-hosted git repository.

mattjackson pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git


The following commit(s) were added to refs/heads/master by this push:
     new 6f0f926  Add default sort to phys_locations (#4547)
6f0f926 is described below

commit 6f0f9264adc3b10003c33840aec76666c0c7a5c1
Author: Steve Hamrick <[email protected]>
AuthorDate: Mon Mar 30 09:49:58 2020 -0600

    Add default sort to phys_locations (#4547)
    
    * Add default sort to phys_locations
    
    * add test to v1
---
 traffic_ops/client/phys_location.go                |  7 ++---
 traffic_ops/client/util.go                         | 13 ++++++++++
 traffic_ops/testing/api/v1/phys_locations_test.go  | 15 +++++++++++
 traffic_ops/testing/api/v2/phys_locations_test.go  | 30 ++++++++++++++++++++++
 .../physlocation/phys_locations.go                 |  7 ++++-
 5 files changed, 68 insertions(+), 4 deletions(-)

diff --git a/traffic_ops/client/phys_location.go 
b/traffic_ops/client/phys_location.go
index 1a8ca1e..b82f1c9 100644
--- a/traffic_ops/client/phys_location.go
+++ b/traffic_ops/client/phys_location.go
@@ -78,9 +78,10 @@ func (to *Session) UpdatePhysLocationByID(id int, pl 
tc.PhysLocation) (tc.Alerts
        return alerts, reqInf, nil
 }
 
-// Returns a list of PhysLocations
-func (to *Session) GetPhysLocations() ([]tc.PhysLocation, ReqInf, error) {
-       resp, remoteAddr, err := to.request(http.MethodGet, API_PHYS_LOCATIONS, 
nil)
+// Returns a list of PhysLocations with optional query parameters applied
+func (to *Session) GetPhysLocations(params map[string]string) 
([]tc.PhysLocation, ReqInf, error) {
+       path := API_PHYS_LOCATIONS + mapToQueryParameters(params)
+       resp, remoteAddr, err := to.request(http.MethodGet, path, nil)
        reqInf := ReqInf{CacheHitStatus: CacheHitStatusMiss, RemoteAddr: 
remoteAddr}
        if err != nil {
                return nil, reqInf, err
diff --git a/traffic_ops/client/util.go b/traffic_ops/client/util.go
index ed4443a..ec718c9 100644
--- a/traffic_ops/client/util.go
+++ b/traffic_ops/client/util.go
@@ -56,3 +56,16 @@ func makeReq(to *Session, method, endpoint string, body 
[]byte, respStruct inter
 
        return reqInf, nil
 }
+
+func mapToQueryParameters(params map[string]string) string {
+       path := ""
+       for key, value := range params {
+               if path == "" {
+                       path += "?"
+               } else {
+                       path += "&"
+               }
+               path += key + "=" + value
+       }
+       return path
+}
diff --git a/traffic_ops/testing/api/v1/phys_locations_test.go 
b/traffic_ops/testing/api/v1/phys_locations_test.go
index 82a8b27..9378c17 100644
--- a/traffic_ops/testing/api/v1/phys_locations_test.go
+++ b/traffic_ops/testing/api/v1/phys_locations_test.go
@@ -17,12 +17,14 @@ package v1
 
 import (
        "testing"
+       "sort"
 
        tc "github.com/apache/trafficcontrol/lib/go-tc"
 )
 
 func TestPhysLocations(t *testing.T) {
        WithObjs(t, []TCObj{CDNs, Parameters, Divisions, Regions, 
PhysLocations}, func() {
+               GetDefaultSortPhysLocationsTest(t)
                UpdateTestPhysLocations(t)
                GetTestPhysLocations(t)
        })
@@ -105,3 +107,16 @@ func DeleteTestPhysLocations(t *testing.T) {
                }
        }
 }
+
+func GetDefaultSortPhysLocationsTest(t *testing.T) {
+       resp, _, err := TOSession.GetPhysLocations()
+       if err != nil {
+               t.Error(err.Error())
+       }
+       sorted := sort.SliceIsSorted(resp, func(i, j int) bool {
+               return resp[i].Name < resp[j].Name
+       })
+       if !sorted {
+               t.Error("expected response to be sorted by name")
+       }
+}
diff --git a/traffic_ops/testing/api/v2/phys_locations_test.go 
b/traffic_ops/testing/api/v2/phys_locations_test.go
index c4b143c..ca34954 100644
--- a/traffic_ops/testing/api/v2/phys_locations_test.go
+++ b/traffic_ops/testing/api/v2/phys_locations_test.go
@@ -16,6 +16,7 @@ package v2
 */
 
 import (
+       "sort"
        "testing"
 
        tc "github.com/apache/trafficcontrol/lib/go-tc"
@@ -23,6 +24,8 @@ import (
 
 func TestPhysLocations(t *testing.T) {
        WithObjs(t, []TCObj{CDNs, Parameters, Divisions, Regions, 
PhysLocations}, func() {
+               GetDefaultSortPhysLocationsTest(t)
+               GetSortPhysLocationsTest(t)
                UpdateTestPhysLocations(t)
                GetTestPhysLocations(t)
        })
@@ -76,6 +79,33 @@ func GetTestPhysLocations(t *testing.T) {
                        t.Errorf("cannot GET PhysLocation by name: %v - %v", 
err, resp)
                }
        }
+
+}
+
+func GetSortPhysLocationsTest(t *testing.T) {
+       resp, _, err := TOSession.GetPhysLocations(map[string]string{"orderby": 
"id"})
+       if err != nil {
+               t.Error(err.Error())
+       }
+       sorted := sort.SliceIsSorted(resp, func(i, j int) bool {
+               return resp[i].ID < resp[j].ID
+       })
+       if !sorted {
+               t.Error("expected response to be sorted by id")
+       }
+}
+
+func GetDefaultSortPhysLocationsTest(t *testing.T) {
+       resp, _, err := TOSession.GetPhysLocations(nil)
+       if err != nil {
+               t.Error(err.Error())
+       }
+       sorted := sort.SliceIsSorted(resp, func(i, j int) bool {
+               return resp[i].Name < resp[j].Name
+       })
+       if !sorted {
+               t.Error("expected response to be sorted by name")
+       }
 }
 
 func DeleteTestPhysLocations(t *testing.T) {
diff --git a/traffic_ops/traffic_ops_golang/physlocation/phys_locations.go 
b/traffic_ops/traffic_ops_golang/physlocation/phys_locations.go
index 1c699d5..cdfbc5a 100644
--- a/traffic_ops/traffic_ops_golang/physlocation/phys_locations.go
+++ b/traffic_ops/traffic_ops_golang/physlocation/phys_locations.go
@@ -98,7 +98,12 @@ func (pl *TOPhysLocation) Validate() error {
        return nil
 }
 
-func (pl *TOPhysLocation) Read() ([]interface{}, error, error, int) { return 
api.GenericRead(pl) }
+func (pl *TOPhysLocation) Read() ([]interface{}, error, error, int) {
+       if _, ok := pl.APIInfo().Params["orderby"]; !ok {
+               pl.APIInfo().Params["orderby"] = "name"
+       }
+       return api.GenericRead(pl)
+}
 func (pl *TOPhysLocation) Update() (error, error, int)              { return 
api.GenericUpdate(pl) }
 func (pl *TOPhysLocation) Create() (error, error, int)              { return 
api.GenericCreate(pl) }
 func (pl *TOPhysLocation) Delete() (error, error, int)              { return 
api.GenericDelete(pl) }

Reply via email to