70 lines
1.7 KiB
Go
70 lines
1.7 KiB
Go
|
// 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)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|