github.com/gohugoio/hugo@v0.88.1/config/commonConfig_test.go (about)

     1  // Copyright 2020 The Hugo Authors. All rights reserved.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  // http://www.apache.org/licenses/LICENSE-2.0
     7  //
     8  // Unless required by applicable law or agreed to in writing, software
     9  // distributed under the License is distributed on an "AS IS" BASIS,
    10  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    11  // See the License for the specific language governing permissions and
    12  // limitations under the License.
    13  
    14  package config
    15  
    16  import (
    17  	"errors"
    18  	"testing"
    19  
    20  	"github.com/gohugoio/hugo/common/herrors"
    21  	"github.com/gohugoio/hugo/common/types"
    22  
    23  	qt "github.com/frankban/quicktest"
    24  )
    25  
    26  func TestBuild(t *testing.T) {
    27  	c := qt.New(t)
    28  
    29  	v := New()
    30  	v.Set("build", map[string]interface{}{
    31  		"useResourceCacheWhen": "always",
    32  	})
    33  
    34  	b := DecodeBuild(v)
    35  
    36  	c.Assert(b.UseResourceCacheWhen, qt.Equals, "always")
    37  
    38  	v.Set("build", map[string]interface{}{
    39  		"useResourceCacheWhen": "foo",
    40  	})
    41  
    42  	b = DecodeBuild(v)
    43  
    44  	c.Assert(b.UseResourceCacheWhen, qt.Equals, "fallback")
    45  
    46  	c.Assert(b.UseResourceCache(herrors.ErrFeatureNotAvailable), qt.Equals, true)
    47  	c.Assert(b.UseResourceCache(errors.New("err")), qt.Equals, false)
    48  
    49  	b.UseResourceCacheWhen = "always"
    50  	c.Assert(b.UseResourceCache(herrors.ErrFeatureNotAvailable), qt.Equals, true)
    51  	c.Assert(b.UseResourceCache(errors.New("err")), qt.Equals, true)
    52  	c.Assert(b.UseResourceCache(nil), qt.Equals, true)
    53  
    54  	b.UseResourceCacheWhen = "never"
    55  	c.Assert(b.UseResourceCache(herrors.ErrFeatureNotAvailable), qt.Equals, false)
    56  	c.Assert(b.UseResourceCache(errors.New("err")), qt.Equals, false)
    57  	c.Assert(b.UseResourceCache(nil), qt.Equals, false)
    58  }
    59  
    60  func TestServer(t *testing.T) {
    61  	c := qt.New(t)
    62  
    63  	cfg, err := FromConfigString(`[[server.headers]]
    64  for = "/*.jpg"
    65  
    66  [server.headers.values]
    67  X-Frame-Options = "DENY"
    68  X-XSS-Protection = "1; mode=block"
    69  X-Content-Type-Options = "nosniff"
    70  
    71  [[server.redirects]]
    72  from = "/foo/**"
    73  to = "/foo/index.html"
    74  status = 200
    75  
    76  [[server.redirects]]
    77  from = "/google/**"
    78  to = "https://google.com/"
    79  status = 301
    80  
    81  [[server.redirects]]
    82  from = "/**"
    83  to = "/default/index.html"
    84  status = 301
    85  
    86  
    87  
    88  `, "toml")
    89  
    90  	c.Assert(err, qt.IsNil)
    91  
    92  	s, err := DecodeServer(cfg)
    93  	c.Assert(err, qt.IsNil)
    94  
    95  	c.Assert(s.MatchHeaders("/foo.jpg"), qt.DeepEquals, []types.KeyValueStr{
    96  		{Key: "X-Content-Type-Options", Value: "nosniff"},
    97  		{Key: "X-Frame-Options", Value: "DENY"},
    98  		{Key: "X-XSS-Protection", Value: "1; mode=block"},
    99  	})
   100  
   101  	c.Assert(s.MatchRedirect("/foo/bar/baz"), qt.DeepEquals, Redirect{
   102  		From:   "/foo/**",
   103  		To:     "/foo/",
   104  		Status: 200,
   105  	})
   106  
   107  	c.Assert(s.MatchRedirect("/someother"), qt.DeepEquals, Redirect{
   108  		From:   "/**",
   109  		To:     "/default/",
   110  		Status: 301,
   111  	})
   112  
   113  	c.Assert(s.MatchRedirect("/google/foo"), qt.DeepEquals, Redirect{
   114  		From:   "/google/**",
   115  		To:     "https://google.com/",
   116  		Status: 301,
   117  	})
   118  
   119  	// No redirect loop, please.
   120  	c.Assert(s.MatchRedirect("/default/index.html"), qt.DeepEquals, Redirect{})
   121  	c.Assert(s.MatchRedirect("/default/"), qt.DeepEquals, Redirect{})
   122  
   123  	for _, errorCase := range []string{
   124  		`[[server.redirects]]
   125  from = "/**"
   126  to = "/file"
   127  status = 301`,
   128  		`[[server.redirects]]
   129  from = "/**"
   130  to = "/foo/file.html"
   131  status = 301`,
   132  	} {
   133  
   134  		cfg, err := FromConfigString(errorCase, "toml")
   135  		c.Assert(err, qt.IsNil)
   136  		_, err = DecodeServer(cfg)
   137  		c.Assert(err, qt.Not(qt.IsNil))
   138  
   139  	}
   140  }