mirror of
https://github.com/photoprism/photoprism.git
synced 2025-12-11 16:24:11 +01:00
149 lines
4.8 KiB
Go
149 lines
4.8 KiB
Go
package fs
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestConfigFilePath(t *testing.T) {
|
|
pwd, _ := os.Getwd()
|
|
|
|
t.Run("EmptyName", func(t *testing.T) {
|
|
assert.Equal(t, "", ConfigFilePath("", "", ""))
|
|
assert.Equal(t, "", ConfigFilePath("", "", ExtYml))
|
|
assert.Equal(t, "", ConfigFilePath("./testdata", "", ExtYml))
|
|
})
|
|
t.Run("EmptyPath", func(t *testing.T) {
|
|
assert.Equal(t, filepath.Join(pwd, "example.json"), ConfigFilePath("", "example", ExtJson))
|
|
assert.Equal(t, filepath.Join(pwd, "example.yml"), ConfigFilePath("", "example", ExtYml))
|
|
assert.Equal(t, filepath.Join(pwd, "example.yaml"), ConfigFilePath("", "example", ExtYaml))
|
|
})
|
|
t.Run("ExtNone", func(t *testing.T) {
|
|
configPath := "testdata/config"
|
|
envPath := filepath.Join(configPath, ".env")
|
|
fooPath := filepath.Join(configPath, ".foo")
|
|
fooPathLocal := fooPath + ExtLocal
|
|
|
|
assert.Equal(t, envPath, ConfigFilePath(configPath, ".env", ExtNone))
|
|
assert.Equal(t, fooPathLocal, ConfigFilePath(configPath, ".foo", ExtNone))
|
|
})
|
|
t.Run("YmlFileExists", func(t *testing.T) {
|
|
dir := t.TempDir()
|
|
name := "app-config"
|
|
|
|
// Create .yml file
|
|
ymlPath := filepath.Join(dir, name+ExtYml)
|
|
err := os.WriteFile(ymlPath, []byte("foo: bar\n"), ModeFile)
|
|
if err != nil {
|
|
t.Fatalf("write %s: %v", ymlPath, err)
|
|
}
|
|
|
|
assert.Equal(t, ymlPath, ConfigFilePath(dir, name, ExtYml))
|
|
assert.Equal(t, ymlPath, ConfigFilePath(dir, name, ExtYaml))
|
|
})
|
|
t.Run("YamlFilesMissing", func(t *testing.T) {
|
|
dir := t.TempDir()
|
|
name := "settings"
|
|
|
|
// Ensure .yml does not exist; do not create it.
|
|
ymlPath := filepath.Join(dir, name+ExtYml)
|
|
yamlPath := filepath.Join(dir, name+ExtYaml)
|
|
|
|
assert.Equal(t, ymlPath, ConfigFilePath(dir, name, ExtYml))
|
|
assert.Equal(t, yamlPath, ConfigFilePath(dir, name, ExtYaml))
|
|
})
|
|
t.Run("BothYamlFilesExist", func(t *testing.T) {
|
|
dir := t.TempDir()
|
|
name := "prefs"
|
|
|
|
// Create both files.
|
|
ymlPath := filepath.Join(dir, name+ExtYml)
|
|
yamlPath := filepath.Join(dir, name+ExtYaml)
|
|
|
|
if err := os.WriteFile(ymlPath, []byte("a: 1\n"), ModeFile); err != nil {
|
|
t.Fatalf("write %s: %v", ymlPath, err)
|
|
}
|
|
|
|
if err := os.WriteFile(yamlPath, []byte("a: 2\n"), ModeFile); err != nil {
|
|
t.Fatalf("write %s: %v", yamlPath, err)
|
|
}
|
|
|
|
assert.Equal(t, ymlPath, ConfigFilePath(dir, name, ExtYml))
|
|
assert.Equal(t, yamlPath, ConfigFilePath(dir, name, ExtYaml))
|
|
})
|
|
t.Run("AlternateExtensions", func(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
defaultExt string
|
|
altExts []string
|
|
expectPathIdx int
|
|
}{
|
|
{name: "geo", defaultExt: ExtGeoJson, altExts: []string{ExtJson}},
|
|
{name: "tml", defaultExt: ExtTml, altExts: []string{ExtToml}},
|
|
{name: "toml", defaultExt: ExtToml, altExts: []string{ExtTml}},
|
|
{name: "md", defaultExt: ExtMd, altExts: []string{ExtMarkdown}},
|
|
{name: "markdown", defaultExt: ExtMarkdown, altExts: []string{ExtMd}},
|
|
{name: "html", defaultExt: ExtHTML, altExts: []string{ExtHTM, ExtXHTML}},
|
|
{name: "html-xhtml", defaultExt: ExtHTML, altExts: []string{ExtXHTML}, expectPathIdx: 0},
|
|
{name: "htm", defaultExt: ExtHTM, altExts: []string{ExtHTML, ExtXHTML}},
|
|
{name: "htm-xhtml", defaultExt: ExtHTM, altExts: []string{ExtXHTML}, expectPathIdx: 0},
|
|
{name: "pb", defaultExt: ExtPb, altExts: []string{ExtProto}},
|
|
{name: "proto", defaultExt: ExtProto, altExts: []string{ExtPb}},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
dir := t.TempDir()
|
|
base := "config-" + tc.name
|
|
|
|
var paths []string
|
|
for _, ext := range tc.altExts {
|
|
path := filepath.Join(dir, base+ext)
|
|
if err := os.WriteFile(path, []byte(ext+" file"), ModeFile); err != nil {
|
|
t.Fatalf("write %s: %v", path, err)
|
|
}
|
|
paths = append(paths, path)
|
|
}
|
|
|
|
expected := paths[tc.expectPathIdx]
|
|
got := ConfigFilePath(dir, base, tc.defaultExt)
|
|
assert.Equal(t, expected, got)
|
|
})
|
|
}
|
|
})
|
|
t.Run("DefaultExtensionPreferred", func(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
defaultExt string
|
|
altExt string
|
|
}{
|
|
{name: "yaml-vs-yml", defaultExt: ExtYaml, altExt: ExtYml},
|
|
{name: "html-vs-htm", defaultExt: ExtHTML, altExt: ExtHTM},
|
|
{name: "proto-vs-pb", defaultExt: ExtProto, altExt: ExtPb},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
dir := t.TempDir()
|
|
base := "prefer-" + tc.name
|
|
|
|
defaultPath := filepath.Join(dir, base+tc.defaultExt)
|
|
if err := os.WriteFile(defaultPath, []byte("default"), ModeFile); err != nil {
|
|
t.Fatalf("write %s: %v", defaultPath, err)
|
|
}
|
|
|
|
altPath := filepath.Join(dir, base+tc.altExt)
|
|
if err := os.WriteFile(altPath, []byte("alt"), ModeFile); err != nil {
|
|
t.Fatalf("write %s: %v", altPath, err)
|
|
}
|
|
|
|
got := ConfigFilePath(dir, base, tc.defaultExt)
|
|
assert.Equal(t, defaultPath, got)
|
|
})
|
|
}
|
|
})
|
|
}
|