Commit a2cc1dfa authored by santiaago's avatar santiaago
Browse files

add extract.Order for handling 'order' parameter.

parent 885b9496
Loading
Loading
Loading
Loading
+22 −1
Original line number Diff line number Diff line
@@ -255,7 +255,7 @@ func Probability(r *http.Request, dp float64) float64 {
	return dp
}

// Inv returns the value of inv param from HTTP request.
// Inv returns the value of inv param from an HTTP request.
// Default value is false
func Inverse(r *http.Request) (inverse bool) {
	strInv := r.FormValue("inv")
@@ -268,3 +268,24 @@ func Inverse(r *http.Request) (inverse bool) {
	}
	return
}

// Order returns an array of integers from an HTTP request.
// url parameter is 'ord'. It is supose to contain integer numbers.
// Default is an empty array
func Order(r *http.Request) (order []int) {
	if err := r.ParseForm(); err != nil {
		return []int{}
	}

	strOrders := r.Form["order"]
	if len(strOrders) == 0 {
		return []int{}
	}

	for _, o := range strOrders {
		if io, err := strconv.ParseInt(o, 0, 64); err == nil {
			order = append(order, int(io))
		}
	}
	return
}
+38 −0
Original line number Diff line number Diff line
@@ -460,3 +460,41 @@ func TestInverse(t *testing.T) {
		}
	}
}

func TestOrder(t *testing.T) {
	t.Parallel()
	tests := []struct {
		title string
		url   string
		order []int
	}{
		{"test wrong input", "http://www.tg.c?order=hello&order=e", []int{}},
		{"test no input", "http://www.tg.c", []int{}},
		{"test good input", "http://www.tg.c?order=0", []int{0}},
		{"test good input", "http://www.tg.c?order=0&order=2&order=1", []int{0, 2, 1}},
	}

	for _, test := range tests {
		t.Log(test.title)
		r := &http.Request{Method: "GET"}
		r.URL, _ = url.Parse(test.url)
		order := Order(r)
		if !areEqual(order, test.order) {
			t.Errorf("expected %v got %v", test.order, order)
		}
	}
}

func areEqual(a, b []int) bool {
	if len(a) != len(b) {
		return false
	}

	for i, _ := range a {
		if a[i] != b[i] {
			return false
		}
	}

	return true
}