79 lines
1.7 KiB
Go
79 lines
1.7 KiB
Go
package domain
|
|
|
|
import (
|
|
"net/url"
|
|
"path"
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
type Site struct {
|
|
DefaultLanguage Language
|
|
Language Language
|
|
Languages []Language
|
|
BaseURL *url.URL
|
|
Params map[string]any
|
|
TimeZone *time.Location
|
|
File Path
|
|
Title string
|
|
Resources Resources
|
|
}
|
|
|
|
func (s Site) LanguagePrefix() string {
|
|
if s.Language != LanguageUnd {
|
|
return path.Join("/", s.Language.lang, "/")
|
|
}
|
|
|
|
return ""
|
|
}
|
|
|
|
func (s Site) IsMultiLingual() bool {
|
|
return 1 < len(s.Languages)
|
|
}
|
|
|
|
func TestSite(tb testing.TB) *Site {
|
|
tb.Helper()
|
|
|
|
ru := NewLanguage("ru")
|
|
en := NewLanguage("en")
|
|
|
|
return &Site{
|
|
DefaultLanguage: en,
|
|
Language: ru,
|
|
Languages: []Language{en, ru},
|
|
BaseURL: &url.URL{Scheme: "http", Host: "127.0.0.1:3000", Path: "/"},
|
|
TimeZone: time.UTC,
|
|
File: NewPath(filepath.Join("content", "index.en.md")),
|
|
Title: "Testing",
|
|
Resources: make([]*Resource, 0),
|
|
Params: map[string]any{
|
|
"server": map[string]any{
|
|
"headers": []any{map[string]any{
|
|
"path": "/**",
|
|
"values": map[string]any{
|
|
"Link": `<https://auth.example.com/>; rel="indieauth-metadata", ` +
|
|
`<https://pub.example.com/>; rel="micropub"`,
|
|
"X-Koroko": "Ya-ha-ha!",
|
|
},
|
|
}, map[string]any{
|
|
"path": "/foo/bar",
|
|
"values": map[string]any{
|
|
"X-Testing": `sample-text`,
|
|
},
|
|
}},
|
|
"redirects": []any{map[string]any{
|
|
"from": "/foo/bar",
|
|
"to": "/bar/foo",
|
|
"status": 302,
|
|
}, map[string]any{
|
|
"from": "/foo",
|
|
"to": "https://example.com/",
|
|
"status": 301,
|
|
"force": true,
|
|
}},
|
|
},
|
|
},
|
|
}
|
|
}
|