hugo/resources/resource_metadata_test.go

232 lines
6.1 KiB
Go

// 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 resources
import (
"testing"
"github.com/gohugoio/hugo/media"
"github.com/gohugoio/hugo/resources/resource"
qt "github.com/frankban/quicktest"
)
func TestAssignMetadata(t *testing.T) {
c := qt.New(t)
spec := newTestResourceSpec(specDescriptor{c: c})
var foo1, foo2, foo3, logo1, logo2, logo3 resource.Resource
var resources resource.Resources
for _, this := range []struct {
metaData []map[string]interface{}
assertFunc func(err error)
}{
{[]map[string]interface{}{
{
"title": "My Resource",
"name": "My Name",
"src": "*",
},
}, func(err error) {
c.Assert(logo1.Title(), qt.Equals, "My Resource")
c.Assert(logo1.Name(), qt.Equals, "My Name")
c.Assert(foo2.Name(), qt.Equals, "My Name")
}},
{[]map[string]interface{}{
{
"title": "My Logo",
"src": "*loGo*",
},
{
"title": "My Resource",
"name": "My Name",
"src": "*",
},
}, func(err error) {
c.Assert(logo1.Title(), qt.Equals, "My Logo")
c.Assert(logo2.Title(), qt.Equals, "My Logo")
c.Assert(logo1.Name(), qt.Equals, "My Name")
c.Assert(foo2.Name(), qt.Equals, "My Name")
c.Assert(foo3.Name(), qt.Equals, "My Name")
c.Assert(foo3.Title(), qt.Equals, "My Resource")
}},
{[]map[string]interface{}{
{
"title": "My Logo",
"src": "*loGo*",
"params": map[string]interface{}{
"Param1": true,
"icon": "logo",
},
},
{
"title": "My Resource",
"src": "*",
"params": map[string]interface{}{
"Param2": true,
"icon": "resource",
},
},
}, func(err error) {
c.Assert(err, qt.IsNil)
c.Assert(logo1.Title(), qt.Equals, "My Logo")
c.Assert(foo3.Title(), qt.Equals, "My Resource")
_, p1 := logo2.Params()["param1"]
_, p2 := foo2.Params()["param2"]
_, p1_2 := foo2.Params()["param1"]
_, p2_2 := logo2.Params()["param2"]
icon1 := logo2.Params()["icon"]
icon2 := foo2.Params()["icon"]
c.Assert(p1, qt.Equals, true)
c.Assert(p2, qt.Equals, true)
// Check merge
c.Assert(p2_2, qt.Equals, true)
c.Assert(p1_2, qt.Equals, false)
c.Assert(icon1, qt.Equals, "logo")
c.Assert(icon2, qt.Equals, "resource")
}},
{[]map[string]interface{}{
{
"name": "Logo Name #:counter",
"src": "*logo*",
},
{
"title": "Resource #:counter",
"name": "Name #:counter",
"src": "*",
},
}, func(err error) {
c.Assert(err, qt.IsNil)
c.Assert(logo2.Title(), qt.Equals, "Resource #2")
c.Assert(logo2.Name(), qt.Equals, "Logo Name #1")
c.Assert(logo1.Title(), qt.Equals, "Resource #4")
c.Assert(logo1.Name(), qt.Equals, "Logo Name #2")
c.Assert(foo2.Title(), qt.Equals, "Resource #1")
c.Assert(foo1.Title(), qt.Equals, "Resource #3")
c.Assert(foo1.Name(), qt.Equals, "Name #2")
c.Assert(foo3.Title(), qt.Equals, "Resource #5")
c.Assert(resources.GetMatch("logo name #1*"), qt.Equals, logo2)
}},
{[]map[string]interface{}{
{
"title": "Third Logo #:counter",
"src": "logo3.png",
},
{
"title": "Other Logo #:counter",
"name": "Name #:counter",
"src": "logo*",
},
}, func(err error) {
c.Assert(err, qt.IsNil)
c.Assert(logo3.Title(), qt.Equals, "Third Logo #1")
c.Assert(logo3.Name(), qt.Equals, "Name #3")
c.Assert(logo2.Title(), qt.Equals, "Other Logo #1")
c.Assert(logo2.Name(), qt.Equals, "Name #1")
c.Assert(logo1.Title(), qt.Equals, "Other Logo #2")
c.Assert(logo1.Name(), qt.Equals, "Name #2")
}},
{[]map[string]interface{}{
{
"title": "Third Logo",
"src": "logo3.png",
},
{
"title": "Other Logo #:counter",
"name": "Name #:counter",
"src": "logo*",
},
}, func(err error) {
c.Assert(err, qt.IsNil)
c.Assert(logo3.Title(), qt.Equals, "Third Logo")
c.Assert(logo3.Name(), qt.Equals, "Name #3")
c.Assert(logo2.Title(), qt.Equals, "Other Logo #1")
c.Assert(logo2.Name(), qt.Equals, "Name #1")
c.Assert(logo1.Title(), qt.Equals, "Other Logo #2")
c.Assert(logo1.Name(), qt.Equals, "Name #2")
}},
{[]map[string]interface{}{
{
"name": "third-logo",
"src": "logo3.png",
},
{
"title": "Logo #:counter",
"name": "Name #:counter",
"src": "logo*",
},
}, func(err error) {
c.Assert(err, qt.IsNil)
c.Assert(logo3.Title(), qt.Equals, "Logo #3")
c.Assert(logo3.Name(), qt.Equals, "third-logo")
c.Assert(logo2.Title(), qt.Equals, "Logo #1")
c.Assert(logo2.Name(), qt.Equals, "Name #1")
c.Assert(logo1.Title(), qt.Equals, "Logo #2")
c.Assert(logo1.Name(), qt.Equals, "Name #2")
}},
{[]map[string]interface{}{
{
"title": "Third Logo #:counter",
},
}, func(err error) {
// Missing src
c.Assert(err, qt.Not(qt.IsNil))
}},
{[]map[string]interface{}{
{
"title": "Title",
"src": "[]",
},
}, func(err error) {
// Invalid pattern
c.Assert(err, qt.Not(qt.IsNil))
}},
} {
foo2 = spec.newGenericResource(nil, nil, nil, "/b/foo2.css", "foo2.css", media.CSSType)
logo2 = spec.newGenericResource(nil, nil, nil, "/b/Logo2.png", "Logo2.png", pngType)
foo1 = spec.newGenericResource(nil, nil, nil, "/a/foo1.css", "foo1.css", media.CSSType)
logo1 = spec.newGenericResource(nil, nil, nil, "/a/logo1.png", "logo1.png", pngType)
foo3 = spec.newGenericResource(nil, nil, nil, "/b/foo3.css", "foo3.css", media.CSSType)
logo3 = spec.newGenericResource(nil, nil, nil, "/b/logo3.png", "logo3.png", pngType)
resources = resource.Resources{
foo2,
logo2,
foo1,
logo1,
foo3,
logo3,
}
this.assertFunc(AssignMetadata(this.metaData, resources...))
}
}