hugo

Fork of github.com/gohugoio/hugo with reverse pagination support

git clone git://git.shimmy1996.com/hugo.git

deployConfig_test.go (4667B)

    1 // Copyright 2019 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 //go:build !nodeploy
   15 // +build !nodeploy
   16 
   17 package deploy
   18 
   19 import (
   20 	"fmt"
   21 	"testing"
   22 
   23 	qt "github.com/frankban/quicktest"
   24 	"github.com/gohugoio/hugo/config"
   25 )
   26 
   27 func TestDecodeConfigFromTOML(t *testing.T) {
   28 	c := qt.New(t)
   29 
   30 	tomlConfig := `
   31 
   32 someOtherValue = "foo"
   33 
   34 [deployment]
   35 
   36 order = ["o1", "o2"]
   37 
   38 # All lowercase.
   39 [[deployment.targets]]
   40 name = "name0"
   41 url = "url0"
   42 cloudfrontdistributionid = "cdn0"
   43 include = "*.html"
   44 
   45 # All uppercase.
   46 [[deployment.targets]]
   47 NAME = "name1"
   48 URL = "url1"
   49 CLOUDFRONTDISTRIBUTIONID = "cdn1"
   50 INCLUDE = "*.jpg"
   51 
   52 # Camelcase.
   53 [[deployment.targets]]
   54 name = "name2"
   55 url = "url2"
   56 cloudFrontDistributionID = "cdn2"
   57 exclude = "*.png"
   58 
   59 # All lowercase.
   60 [[deployment.matchers]]
   61 pattern = "^pattern0$"
   62 cachecontrol = "cachecontrol0"
   63 contentencoding = "contentencoding0"
   64 contenttype = "contenttype0"
   65 
   66 # All uppercase.
   67 [[deployment.matchers]]
   68 PATTERN = "^pattern1$"
   69 CACHECONTROL = "cachecontrol1"
   70 CONTENTENCODING = "contentencoding1"
   71 CONTENTTYPE = "contenttype1"
   72 GZIP = true
   73 FORCE = true
   74 
   75 # Camelcase.
   76 [[deployment.matchers]]
   77 pattern = "^pattern2$"
   78 cacheControl = "cachecontrol2"
   79 contentEncoding = "contentencoding2"
   80 contentType = "contenttype2"
   81 gzip = true
   82 force = true
   83 `
   84 	cfg, err := config.FromConfigString(tomlConfig, "toml")
   85 	c.Assert(err, qt.IsNil)
   86 
   87 	dcfg, err := decodeConfig(cfg)
   88 	c.Assert(err, qt.IsNil)
   89 
   90 	// Order.
   91 	c.Assert(len(dcfg.Order), qt.Equals, 2)
   92 	c.Assert(dcfg.Order[0], qt.Equals, "o1")
   93 	c.Assert(dcfg.Order[1], qt.Equals, "o2")
   94 	c.Assert(len(dcfg.ordering), qt.Equals, 2)
   95 
   96 	// Targets.
   97 	c.Assert(len(dcfg.Targets), qt.Equals, 3)
   98 	wantInclude := []string{"*.html", "*.jpg", ""}
   99 	wantExclude := []string{"", "", "*.png"}
  100 	for i := 0; i < 3; i++ {
  101 		tgt := dcfg.Targets[i]
  102 		c.Assert(tgt.Name, qt.Equals, fmt.Sprintf("name%d", i))
  103 		c.Assert(tgt.URL, qt.Equals, fmt.Sprintf("url%d", i))
  104 		c.Assert(tgt.CloudFrontDistributionID, qt.Equals, fmt.Sprintf("cdn%d", i))
  105 		c.Assert(tgt.Include, qt.Equals, wantInclude[i])
  106 		if wantInclude[i] != "" {
  107 			c.Assert(tgt.includeGlob, qt.Not(qt.IsNil))
  108 		}
  109 		c.Assert(tgt.Exclude, qt.Equals, wantExclude[i])
  110 		if wantExclude[i] != "" {
  111 			c.Assert(tgt.excludeGlob, qt.Not(qt.IsNil))
  112 		}
  113 	}
  114 
  115 	// Matchers.
  116 	c.Assert(len(dcfg.Matchers), qt.Equals, 3)
  117 	for i := 0; i < 3; i++ {
  118 		m := dcfg.Matchers[i]
  119 		c.Assert(m.Pattern, qt.Equals, fmt.Sprintf("^pattern%d$", i))
  120 		c.Assert(m.re, qt.Not(qt.IsNil))
  121 		c.Assert(m.CacheControl, qt.Equals, fmt.Sprintf("cachecontrol%d", i))
  122 		c.Assert(m.ContentEncoding, qt.Equals, fmt.Sprintf("contentencoding%d", i))
  123 		c.Assert(m.ContentType, qt.Equals, fmt.Sprintf("contenttype%d", i))
  124 		c.Assert(m.Gzip, qt.Equals, i != 0)
  125 		c.Assert(m.Force, qt.Equals, i != 0)
  126 	}
  127 }
  128 
  129 func TestInvalidOrderingPattern(t *testing.T) {
  130 	c := qt.New(t)
  131 
  132 	tomlConfig := `
  133 
  134 someOtherValue = "foo"
  135 
  136 [deployment]
  137 order = ["["]  # invalid regular expression
  138 `
  139 	cfg, err := config.FromConfigString(tomlConfig, "toml")
  140 	c.Assert(err, qt.IsNil)
  141 
  142 	_, err = decodeConfig(cfg)
  143 	c.Assert(err, qt.Not(qt.IsNil))
  144 }
  145 
  146 func TestInvalidMatcherPattern(t *testing.T) {
  147 	c := qt.New(t)
  148 
  149 	tomlConfig := `
  150 
  151 someOtherValue = "foo"
  152 
  153 [deployment]
  154 [[deployment.matchers]]
  155 Pattern = "["  # invalid regular expression
  156 `
  157 	cfg, err := config.FromConfigString(tomlConfig, "toml")
  158 	c.Assert(err, qt.IsNil)
  159 
  160 	_, err = decodeConfig(cfg)
  161 	c.Assert(err, qt.Not(qt.IsNil))
  162 }
  163 
  164 func TestDecodeConfigDefault(t *testing.T) {
  165 	c := qt.New(t)
  166 
  167 	dcfg, err := decodeConfig(config.New())
  168 	c.Assert(err, qt.IsNil)
  169 	c.Assert(len(dcfg.Targets), qt.Equals, 0)
  170 	c.Assert(len(dcfg.Matchers), qt.Equals, 0)
  171 }
  172 
  173 func TestEmptyTarget(t *testing.T) {
  174 	c := qt.New(t)
  175 
  176 	tomlConfig := `
  177 [deployment]
  178 [[deployment.targets]]
  179 `
  180 	cfg, err := config.FromConfigString(tomlConfig, "toml")
  181 	c.Assert(err, qt.IsNil)
  182 
  183 	_, err = decodeConfig(cfg)
  184 	c.Assert(err, qt.Not(qt.IsNil))
  185 }
  186 
  187 func TestEmptyMatcher(t *testing.T) {
  188 	c := qt.New(t)
  189 
  190 	tomlConfig := `
  191 [deployment]
  192 [[deployment.matchers]]
  193 `
  194 	cfg, err := config.FromConfigString(tomlConfig, "toml")
  195 	c.Assert(err, qt.IsNil)
  196 
  197 	_, err = decodeConfig(cfg)
  198 	c.Assert(err, qt.Not(qt.IsNil))
  199 }