Skip to content

Commit

Permalink
fetcher: add tests for IsModified behaviour
Browse files Browse the repository at this point in the history
In particular, add a failing test for the case where ETag changes but
Last-Modified does not.
  • Loading branch information
smlx committed Jul 2, 2024
1 parent 4498ba1 commit fa15e7e
Showing 1 changed file with 69 additions and 0 deletions.
69 changes: 69 additions & 0 deletions internal/reader/fetcher/response_handler_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
// SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

package fetcher // import "miniflux.app/v2/internal/reader/fetcher"

import (
"net/http"
"testing"
)

func TestIsModified(t *testing.T) {
var cachedEtag = "abc123"
var cachedLastModified = "Wed, 21 Oct 2015 07:28:00 GMT"

var testCases = map[string]struct {
Status int
LastModified string
ETag string
IsModified bool
}{
"Unmodified 304": {
Status: 304,
LastModified: cachedLastModified,
ETag: cachedEtag,
IsModified: false,
},
"Unmodified 200": {
Status: 200,
LastModified: cachedLastModified,
ETag: cachedEtag,
IsModified: false,
},
// This case is invalid per RFC9110 8.8.1, so ETag takes precedence.
"Last-Modified changed only": {
Status: 200,
LastModified: "Thu, 22 Oct 2015 07:28:00 GMT",
ETag: cachedEtag,
IsModified: false,
},
"ETag changed only": {
Status: 200,
LastModified: cachedLastModified,
ETag: "xyz789",
IsModified: true,
},
"ETag and Last-Modified changed": {
Status: 200,
LastModified: "Thu, 22 Oct 2015 07:28:00 GMT",
ETag: "xyz789",
IsModified: true,
},
}
for name, tc := range testCases {
t.Run(name, func(tt *testing.T) {
header := http.Header{}
header.Add("Last-Modified", tc.LastModified)
header.Add("ETag", tc.ETag)
rh := ResponseHandler{
httpResponse: &http.Response{
StatusCode: tc.Status,
Header: header,
},
}
if tc.IsModified != rh.IsModified(cachedEtag, cachedLastModified) {
tt.Error(name)
}
})
}
}

0 comments on commit fa15e7e

Please sign in to comment.