| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- // 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)
- }
- })
- }
- }
|