github.com/simonferquel/app@v0.6.1-0.20181012141724-68b7cccf26ac/types/settings/load_test.go (about) 1 package settings 2 3 import ( 4 "testing" 5 6 "gotest.tools/assert" 7 is "gotest.tools/assert/cmp" 8 "gotest.tools/fs" 9 ) 10 11 func TestLoadErrors(t *testing.T) { 12 _, err := Load([]byte("invalid yaml")) 13 assert.Check(t, is.ErrorContains(err, "failed to read settings")) 14 15 _, err = Load([]byte(` 16 foo: bar 17 1: baz`)) 18 assert.Check(t, is.ErrorContains(err, "Non-string key at top level: 1")) 19 20 _, err = Load([]byte(` 21 foo: 22 bar: baz 23 1: banana`)) 24 assert.Check(t, is.ErrorContains(err, "Non-string key in foo: 1")) 25 } 26 27 func TestLoad(t *testing.T) { 28 settings, err := Load([]byte(` 29 foo: bar 30 bar: 31 baz: banana 32 port: 80 33 baz: 34 - a 35 - b`)) 36 assert.NilError(t, err) 37 assert.Check(t, is.DeepEqual(settings.Flatten(), map[string]string{ 38 "foo": "bar", 39 "bar.baz": "banana", 40 "bar.port": "80", 41 "baz.0": "a", 42 "baz.1": "b", 43 })) 44 } 45 46 func TestLoadWithPrefix(t *testing.T) { 47 settings, err := Load([]byte(` 48 foo: bar 49 bar: baz 50 `), WithPrefix("p")) 51 assert.NilError(t, err) 52 assert.Check(t, is.DeepEqual(settings.Flatten(), map[string]string{ 53 "p.foo": "bar", 54 "p.bar": "baz", 55 })) 56 } 57 58 func TestLoadFiles(t *testing.T) { 59 dir := fs.NewDir(t, "files", 60 fs.WithFile("s1", ` 61 foo: bar 62 bar: 63 baz: banana 64 port: 80`), 65 fs.WithFile("s2", ` 66 foo: baz 67 bar: 68 port: 10`), 69 ) 70 defer dir.Remove() 71 72 settings, err := LoadFiles([]string{dir.Join("s1"), dir.Join("s2")}) 73 assert.NilError(t, err) 74 assert.Check(t, is.DeepEqual(settings.Flatten(), map[string]string{ 75 "foo": "baz", 76 "bar.baz": "banana", 77 "bar.port": "10", 78 })) 79 } 80 81 func TestLoadMultiples(t *testing.T) { 82 datas := [][]byte{ 83 []byte(` 84 foo: bar 85 bar: 86 baz: banana 87 port: 80`), 88 []byte(` 89 foo: baz 90 bar: 91 port: 10`), 92 } 93 94 settings, err := LoadMultiple(datas) 95 assert.NilError(t, err) 96 assert.Check(t, is.DeepEqual(settings.Flatten(), map[string]string{ 97 "foo": "baz", 98 "bar.baz": "banana", 99 "bar.port": "10", 100 })) 101 }