shithub: hugo

ref: 7ff0a8ee9fe8d710d407e57faf1fda43bd635f28
dir: /deploy/deployConfig_test.go/

View raw version
// Copyright 2019 The Hugo Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package deploy

import (
	"fmt"
	"testing"

	"github.com/gohugoio/hugo/config"
	"github.com/spf13/viper"
	"github.com/stretchr/testify/require"
)

func TestDecodeConfigFromTOML(t *testing.T) {
	assert := require.New(t)

	tomlConfig := `

someOtherValue = "foo"

[deployment]

order = ["o1", "o2"]

# All lowercase.
[[deployment.targets]]
name = "name0"
url = "url0"
cloudfrontdistributionid = "cdn0"

# All uppercase.
[[deployment.targets]]
NAME = "name1"
URL = "url1"
CLOUDFRONTDISTRIBUTIONID = "cdn1"

# Camelcase.
[[deployment.targets]]
name = "name2"
url = "url2"
cloudFrontDistributionID = "cdn2"

# All lowercase.
[[deployment.matchers]]
pattern = "^pattern0$"
cachecontrol = "cachecontrol0"
contentencoding = "contentencoding0"
contenttype = "contenttype0"

# All uppercase.
[[deployment.matchers]]
PATTERN = "^pattern1$"
CACHECONTROL = "cachecontrol1"
CONTENTENCODING = "contentencoding1"
CONTENTTYPE = "contenttype1"
GZIP = true
FORCE = true

# Camelcase.
[[deployment.matchers]]
pattern = "^pattern2$"
cacheControl = "cachecontrol2"
contentEncoding = "contentencoding2"
contentType = "contenttype2"
gzip = true
force = true
`
	cfg, err := config.FromConfigString(tomlConfig, "toml")
	assert.NoError(err)

	dcfg, err := decodeConfig(cfg)
	assert.NoError(err)

	// Order.
	assert.Equal(2, len(dcfg.Order))
	assert.Equal("o1", dcfg.Order[0])
	assert.Equal("o2", dcfg.Order[1])
	assert.Equal(2, len(dcfg.ordering))

	// Targets.
	assert.Equal(3, len(dcfg.Targets))
	for i := 0; i < 3; i++ {
		tgt := dcfg.Targets[i]
		assert.Equal(fmt.Sprintf("name%d", i), tgt.Name)
		assert.Equal(fmt.Sprintf("url%d", i), tgt.URL)
		assert.Equal(fmt.Sprintf("cdn%d", i), tgt.CloudFrontDistributionID)
	}

	// Matchers.
	assert.Equal(3, len(dcfg.Matchers))
	for i := 0; i < 3; i++ {
		m := dcfg.Matchers[i]
		assert.Equal(fmt.Sprintf("^pattern%d$", i), m.Pattern)
		assert.NotNil(m.re)
		assert.Equal(fmt.Sprintf("cachecontrol%d", i), m.CacheControl)
		assert.Equal(fmt.Sprintf("contentencoding%d", i), m.ContentEncoding)
		assert.Equal(fmt.Sprintf("contenttype%d", i), m.ContentType)
		assert.Equal(i != 0, m.Gzip)
		assert.Equal(i != 0, m.Force)
	}
}

func TestInvalidOrderingPattern(t *testing.T) {
	assert := require.New(t)

	tomlConfig := `

someOtherValue = "foo"

[deployment]
order = ["["]  # invalid regular expression
`
	cfg, err := config.FromConfigString(tomlConfig, "toml")
	assert.NoError(err)

	_, err = decodeConfig(cfg)
	assert.Error(err)
}

func TestInvalidMatcherPattern(t *testing.T) {
	assert := require.New(t)

	tomlConfig := `

someOtherValue = "foo"

[deployment]
[[deployment.matchers]]
Pattern = "["  # invalid regular expression
`
	cfg, err := config.FromConfigString(tomlConfig, "toml")
	assert.NoError(err)

	_, err = decodeConfig(cfg)
	assert.Error(err)
}

func TestDecodeConfigDefault(t *testing.T) {
	assert := require.New(t)

	dcfg, err := decodeConfig(viper.New())
	assert.NoError(err)
	assert.Equal(0, len(dcfg.Targets))
	assert.Equal(0, len(dcfg.Matchers))
}