Browse Source

Add unit test for HTTP client response functions

Frédéric Guillot 8 years ago
parent
commit
c5cd38de83
2 changed files with 61 additions and 1 deletions
  1. 5 1
      reader/http/response.go
  2. 56 0
      reader/http/response_test.go

+ 5 - 1
reader/http/response.go

@@ -28,7 +28,11 @@ func (r *Response) IsModified(etag, lastModified string) bool {
 		return false
 	}
 
-	if r.ETag != "" && r.LastModified != "" && (r.ETag == etag || r.LastModified == lastModified) {
+	if r.ETag != "" && r.ETag == etag {
+		return false
+	}
+
+	if r.LastModified != "" && r.LastModified == lastModified {
 		return false
 	}
 

+ 56 - 0
reader/http/response_test.go

@@ -0,0 +1,56 @@
+// Copyright 2017 Frédéric Guillot. All rights reserved.
+// Use of this source code is governed by the Apache 2.0
+// license that can be found in the LICENSE file.
+
+package http
+
+import "testing"
+
+func TestHasServerFailureWith200Status(t *testing.T) {
+	r := &Response{StatusCode: 200}
+	if r.HasServerFailure() {
+		t.Error("200 is not a failure")
+	}
+}
+
+func TestHasServerFailureWith404Status(t *testing.T) {
+	r := &Response{StatusCode: 404}
+	if !r.HasServerFailure() {
+		t.Error("404 is a failure")
+	}
+}
+
+func TestHasServerFailureWith500Status(t *testing.T) {
+	r := &Response{StatusCode: 500}
+	if !r.HasServerFailure() {
+		t.Error("500 is a failure")
+	}
+}
+
+func TestIsModifiedWith304Status(t *testing.T) {
+	r := &Response{StatusCode: 304}
+	if r.IsModified("etag", "lastModified") {
+		t.Error("The resource should not be considered modified")
+	}
+}
+
+func TestIsModifiedWithIdenticalEtag(t *testing.T) {
+	r := &Response{StatusCode: 200, ETag: "etag"}
+	if r.IsModified("etag", "lastModified") {
+		t.Error("The resource should not be considered modified")
+	}
+}
+
+func TestIsModifiedWithIdenticalLastModified(t *testing.T) {
+	r := &Response{StatusCode: 200, LastModified: "lastModified"}
+	if r.IsModified("etag", "lastModified") {
+		t.Error("The resource should not be considered modified")
+	}
+}
+
+func TestIsModifiedWithDifferentHeaders(t *testing.T) {
+	r := &Response{StatusCode: 200, ETag: "some etag", LastModified: "some date"}
+	if !r.IsModified("etag", "lastModified") {
+		t.Error("The resource should be considered modified")
+	}
+}