fetcher: add tests for IsModified behaviour
In particular, add a failing test for the case where ETag changes but Last-Modified does not.
This commit is contained in:
parent
1a81866bb9
commit
c787bb5b48
1 changed files with 69 additions and 0 deletions
69
internal/reader/fetcher/response_handler_test.go
Normal file
69
internal/reader/fetcher/response_handler_test.go
Normal file
|
@ -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)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue