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  }