Browse Source

Added HEAD

Piotr Czajkowski 3 years ago
parent
commit
556cc02195
2 changed files with 42 additions and 1 deletions
  1. 14 0
      rest.go
  2. 28 1
      rest_test.go

+ 14 - 0
rest.go

@@ -75,6 +75,20 @@ func GET(url string) (*bytes.Buffer, error) {
 	return body, nil
 }
 
+//HEAD returns map[string][]string of response header.
+func HEAD(url string) (map[string][]string, error) {
+	resp, err := http.Head(url)
+	if err != nil {
+		return nil, fmt.Errorf("Response error: %v", err)
+	}
+
+	if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusPartialContent {
+		return resp.Header, fmt.Errorf("Request unsuccessful: %v - %v", resp.Status, url)
+	}
+
+	return resp.Header, nil
+}
+
 //BodyToBuffer reads data from ReadCloser and returns bytes buffer.
 func BodyToBuffer(data io.ReadCloser) (*bytes.Buffer, error) {
 	var buffer bytes.Buffer

+ 28 - 1
rest_test.go

@@ -72,8 +72,8 @@ func TestJSONDecoderBadJSONType(t *testing.T) {
 
 func fakeServer(statusCode int, data string) *httptest.Server {
 	function := func(w http.ResponseWriter, r *http.Request) {
-		w.WriteHeader(statusCode)
 		w.Header().Set("Content-Type", "text")
+		w.WriteHeader(statusCode)
 		fmt.Fprint(w, data)
 	}
 
@@ -153,3 +153,30 @@ func TestGETNoServer(t *testing.T) {
 		t.Error("There should be an error!")
 	}
 }
+
+func TestHEAD(t *testing.T) {
+	server := fakeServer(http.StatusOK, "")
+	defer server.Close()
+
+	data, err := HEAD(server.URL)
+	if err != nil {
+		t.Error(err)
+	}
+
+	if data == nil {
+		t.Error("Data shouldn't be nil")
+	}
+
+	content, ok := data["Content-Type"]
+	if !ok {
+		t.Error("There's no Content-Type in header!")
+	}
+
+	if len(content) == 0 {
+		t.Error("There's no value set for Content-Type!")
+	}
+
+	if content[0] != "text" {
+		t.Errorf("Content-Type should be set to 'text', but is '%s'!", content[0])
+	}
+}