1package app
2
3import (
4 "os"
5 "path/filepath"
6 "testing"
7
8 "github.com/spf13/viper"
9 "github.com/stretchr/testify/assert"
10 "github.com/stretchr/testify/require"
11)
12
13func TestConfigureViper_ExplicitPathExtensionIsCaseInsensitive(t *testing.T) {
14 tests := []struct {
15 name string
16 ext string
17 content string
18 }{
19 {name: "lowercase yaml", ext: ".yaml", content: "foo: bar\n"},
20 {name: "uppercase yaml", ext: ".YAML", content: "foo: bar\n"},
21 {name: "mixed case yml", ext: ".YmL", content: "foo: bar\n"},
22 {name: "uppercase json", ext: ".JSON", content: "{\"foo\":\"bar\"}\n"},
23 {name: "uppercase toml", ext: ".TOML", content: "foo = \"bar\"\n"},
24 }
25
26 for _, tt := range tests {
27 t.Run(tt.name, func(t *testing.T) {
28 path := filepath.Join(t.TempDir(), "gordon"+tt.ext)
29 require.NoError(t, os.WriteFile(path, []byte(tt.content), 0o600))
30
31 v := viper.New()
32 ConfigureViper(v, path)
33 require.NoError(t, v.ReadInConfig())
34 assert.Equal(t, "bar", v.GetString("foo"))
35 })
36 }
37}
38
39func TestConfigureViper_UnknownExtensionFallsBackToTOML(t *testing.T) {
40 path := filepath.Join(t.TempDir(), "gordon.conf")
41 require.NoError(t, os.WriteFile(path, []byte("foo = \"bar\"\n"), 0o600))
42
43 v := viper.New()
44 ConfigureViper(v, path)
45 require.NoError(t, v.ReadInConfig())
46 assert.Equal(t, "bar", v.GetString("foo"))
47}