hugo

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

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

resource_metadata_test.go (6119B)

    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 package resources
   15 
   16 import (
   17 	"testing"
   18 
   19 	"github.com/gohugoio/hugo/media"
   20 	"github.com/gohugoio/hugo/resources/resource"
   21 
   22 	qt "github.com/frankban/quicktest"
   23 )
   24 
   25 func TestAssignMetadata(t *testing.T) {
   26 	c := qt.New(t)
   27 	spec := newTestResourceSpec(specDescriptor{c: c})
   28 
   29 	var foo1, foo2, foo3, logo1, logo2, logo3 resource.Resource
   30 	var resources resource.Resources
   31 
   32 	for _, this := range []struct {
   33 		metaData   []map[string]any
   34 		assertFunc func(err error)
   35 	}{
   36 		{[]map[string]any{
   37 			{
   38 				"title": "My Resource",
   39 				"name":  "My Name",
   40 				"src":   "*",
   41 			},
   42 		}, func(err error) {
   43 			c.Assert(logo1.Title(), qt.Equals, "My Resource")
   44 			c.Assert(logo1.Name(), qt.Equals, "My Name")
   45 			c.Assert(foo2.Name(), qt.Equals, "My Name")
   46 		}},
   47 		{[]map[string]any{
   48 			{
   49 				"title": "My Logo",
   50 				"src":   "*loGo*",
   51 			},
   52 			{
   53 				"title": "My Resource",
   54 				"name":  "My Name",
   55 				"src":   "*",
   56 			},
   57 		}, func(err error) {
   58 			c.Assert(logo1.Title(), qt.Equals, "My Logo")
   59 			c.Assert(logo2.Title(), qt.Equals, "My Logo")
   60 			c.Assert(logo1.Name(), qt.Equals, "My Name")
   61 			c.Assert(foo2.Name(), qt.Equals, "My Name")
   62 			c.Assert(foo3.Name(), qt.Equals, "My Name")
   63 			c.Assert(foo3.Title(), qt.Equals, "My Resource")
   64 		}},
   65 		{[]map[string]any{
   66 			{
   67 				"title": "My Logo",
   68 				"src":   "*loGo*",
   69 				"params": map[string]any{
   70 					"Param1": true,
   71 					"icon":   "logo",
   72 				},
   73 			},
   74 			{
   75 				"title": "My Resource",
   76 				"src":   "*",
   77 				"params": map[string]any{
   78 					"Param2": true,
   79 					"icon":   "resource",
   80 				},
   81 			},
   82 		}, func(err error) {
   83 			c.Assert(err, qt.IsNil)
   84 			c.Assert(logo1.Title(), qt.Equals, "My Logo")
   85 			c.Assert(foo3.Title(), qt.Equals, "My Resource")
   86 			_, p1 := logo2.Params()["param1"]
   87 			_, p2 := foo2.Params()["param2"]
   88 			_, p1_2 := foo2.Params()["param1"]
   89 			_, p2_2 := logo2.Params()["param2"]
   90 
   91 			icon1 := logo2.Params()["icon"]
   92 			icon2 := foo2.Params()["icon"]
   93 
   94 			c.Assert(p1, qt.Equals, true)
   95 			c.Assert(p2, qt.Equals, true)
   96 
   97 			// Check merge
   98 			c.Assert(p2_2, qt.Equals, true)
   99 			c.Assert(p1_2, qt.Equals, false)
  100 
  101 			c.Assert(icon1, qt.Equals, "logo")
  102 			c.Assert(icon2, qt.Equals, "resource")
  103 		}},
  104 		{[]map[string]any{
  105 			{
  106 				"name": "Logo Name #:counter",
  107 				"src":  "*logo*",
  108 			},
  109 			{
  110 				"title": "Resource #:counter",
  111 				"name":  "Name #:counter",
  112 				"src":   "*",
  113 			},
  114 		}, func(err error) {
  115 			c.Assert(err, qt.IsNil)
  116 			c.Assert(logo2.Title(), qt.Equals, "Resource #2")
  117 			c.Assert(logo2.Name(), qt.Equals, "Logo Name #1")
  118 			c.Assert(logo1.Title(), qt.Equals, "Resource #4")
  119 			c.Assert(logo1.Name(), qt.Equals, "Logo Name #2")
  120 			c.Assert(foo2.Title(), qt.Equals, "Resource #1")
  121 			c.Assert(foo1.Title(), qt.Equals, "Resource #3")
  122 			c.Assert(foo1.Name(), qt.Equals, "Name #2")
  123 			c.Assert(foo3.Title(), qt.Equals, "Resource #5")
  124 
  125 			c.Assert(resources.GetMatch("logo name #1*"), qt.Equals, logo2)
  126 		}},
  127 		{[]map[string]any{
  128 			{
  129 				"title": "Third Logo #:counter",
  130 				"src":   "logo3.png",
  131 			},
  132 			{
  133 				"title": "Other Logo #:counter",
  134 				"name":  "Name #:counter",
  135 				"src":   "logo*",
  136 			},
  137 		}, func(err error) {
  138 			c.Assert(err, qt.IsNil)
  139 			c.Assert(logo3.Title(), qt.Equals, "Third Logo #1")
  140 			c.Assert(logo3.Name(), qt.Equals, "Name #3")
  141 			c.Assert(logo2.Title(), qt.Equals, "Other Logo #1")
  142 			c.Assert(logo2.Name(), qt.Equals, "Name #1")
  143 			c.Assert(logo1.Title(), qt.Equals, "Other Logo #2")
  144 			c.Assert(logo1.Name(), qt.Equals, "Name #2")
  145 		}},
  146 		{[]map[string]any{
  147 			{
  148 				"title": "Third Logo",
  149 				"src":   "logo3.png",
  150 			},
  151 			{
  152 				"title": "Other Logo #:counter",
  153 				"name":  "Name #:counter",
  154 				"src":   "logo*",
  155 			},
  156 		}, func(err error) {
  157 			c.Assert(err, qt.IsNil)
  158 			c.Assert(logo3.Title(), qt.Equals, "Third Logo")
  159 			c.Assert(logo3.Name(), qt.Equals, "Name #3")
  160 			c.Assert(logo2.Title(), qt.Equals, "Other Logo #1")
  161 			c.Assert(logo2.Name(), qt.Equals, "Name #1")
  162 			c.Assert(logo1.Title(), qt.Equals, "Other Logo #2")
  163 			c.Assert(logo1.Name(), qt.Equals, "Name #2")
  164 		}},
  165 		{[]map[string]any{
  166 			{
  167 				"name": "third-logo",
  168 				"src":  "logo3.png",
  169 			},
  170 			{
  171 				"title": "Logo #:counter",
  172 				"name":  "Name #:counter",
  173 				"src":   "logo*",
  174 			},
  175 		}, func(err error) {
  176 			c.Assert(err, qt.IsNil)
  177 			c.Assert(logo3.Title(), qt.Equals, "Logo #3")
  178 			c.Assert(logo3.Name(), qt.Equals, "third-logo")
  179 			c.Assert(logo2.Title(), qt.Equals, "Logo #1")
  180 			c.Assert(logo2.Name(), qt.Equals, "Name #1")
  181 			c.Assert(logo1.Title(), qt.Equals, "Logo #2")
  182 			c.Assert(logo1.Name(), qt.Equals, "Name #2")
  183 		}},
  184 		{[]map[string]any{
  185 			{
  186 				"title": "Third Logo #:counter",
  187 			},
  188 		}, func(err error) {
  189 			// Missing src
  190 			c.Assert(err, qt.Not(qt.IsNil))
  191 		}},
  192 		{[]map[string]any{
  193 			{
  194 				"title": "Title",
  195 				"src":   "[]",
  196 			},
  197 		}, func(err error) {
  198 			// Invalid pattern
  199 			c.Assert(err, qt.Not(qt.IsNil))
  200 		}},
  201 	} {
  202 
  203 		foo2 = spec.newGenericResource(nil, nil, nil, "/b/foo2.css", "foo2.css", media.CSSType)
  204 		logo2 = spec.newGenericResource(nil, nil, nil, "/b/Logo2.png", "Logo2.png", pngType)
  205 		foo1 = spec.newGenericResource(nil, nil, nil, "/a/foo1.css", "foo1.css", media.CSSType)
  206 		logo1 = spec.newGenericResource(nil, nil, nil, "/a/logo1.png", "logo1.png", pngType)
  207 		foo3 = spec.newGenericResource(nil, nil, nil, "/b/foo3.css", "foo3.css", media.CSSType)
  208 		logo3 = spec.newGenericResource(nil, nil, nil, "/b/logo3.png", "logo3.png", pngType)
  209 
  210 		resources = resource.Resources{
  211 			foo2,
  212 			logo2,
  213 			foo1,
  214 			logo1,
  215 			foo3,
  216 			logo3,
  217 		}
  218 
  219 		this.assertFunc(AssignMetadata(this.metaData, resources...))
  220 	}
  221 }