1// Copyright 2017 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
14package hugolib
15
16import (
17	"testing"
18)
19
20func Test404(t *testing.T) {
21	t.Parallel()
22
23	b := newTestSitesBuilder(t)
24	b.WithSimpleConfigFile().WithTemplatesAdded(
25		"404.html",
26		`
27{{ $home := site.Home }}
28404:
29Parent: {{ .Parent.Kind }}
30IsAncestor: {{ .IsAncestor $home }}/{{ $home.IsAncestor . }}
31IsDescendant: {{ .IsDescendant $home }}/{{ $home.IsDescendant . }}
32CurrentSection: {{ .CurrentSection.Kind }}|
33FirstSection: {{ .FirstSection.Kind }}|
34InSection: {{ .InSection $home.Section }}|{{ $home.InSection . }}
35Sections: {{ len .Sections }}|
36Page: {{ .Page.RelPermalink }}|
37Data: {{ len .Data }}|
38
39`,
40	)
41	b.Build(BuildCfg{})
42
43	// Note: We currently have only 1 404 page. One might think that we should have
44	// multiple, to follow the Custom Output scheme, but I don't see how that would work
45	// right now.
46	b.AssertFileContent("public/404.html", `
47
48  404:
49Parent: home
50IsAncestor: false/true
51IsDescendant: true/false
52CurrentSection: home|
53FirstSection: home|
54InSection: false|true
55Sections: 0|
56Page: /404.html|
57Data: 1|
58
59`)
60}
61
62func Test404WithBase(t *testing.T) {
63	t.Parallel()
64
65	b := newTestSitesBuilder(t)
66	b.WithSimpleConfigFile().WithTemplates("404.html", `{{ define "main" }}
67Page not found
68{{ end }}`,
69		"baseof.html", `Base: {{ block "main" . }}{{ end }}`).WithContent("page.md", ``)
70
71	b.Build(BuildCfg{})
72
73	// Note: We currently have only 1 404 page. One might think that we should have
74	// multiple, to follow the Custom Output scheme, but I don't see how that would work
75	// right now.
76	b.AssertFileContent("public/404.html", `
77Base:
78Page not found`)
79}
80