go.charczuk.com@v0.0.0-20240327042549-bc490516bd1a/sdk/configutil/read_test.go (about) 1 /* 2 3 Copyright (c) 2023 - Present. Will Charczuk. All rights reserved. 4 Use of this source code is governed by a MIT license that can be found in the LICENSE file at the root of the repository. 5 6 */ 7 8 package configutil 9 10 import ( 11 "encoding/json" 12 "io" 13 "testing" 14 15 . "go.charczuk.com/sdk/assert" 16 ) 17 18 func Test_Read_file(t *testing.T) { 19 var cfg struct { 20 First string `json:"first"` 21 Second string `json:"second"` 22 } 23 24 paths, err := Read(&cfg, OptPaths("./testdata/config.json")) 25 ItsEqual(t, nil, err) 26 ItsEqual(t, []string{"./testdata/config.json"}, paths) 27 28 ItsEqual(t, "test_json", cfg.First) 29 ItsEqual(t, "moo", cfg.Second) 30 } 31 32 func Test_Read_pathNotFound(t *testing.T) { 33 var cfg struct { 34 First string `json:"first"` 35 Second string `json:"second"` 36 } 37 _, err := Read(&cfg, OptPaths("./testdata/bogus")) 38 ItsEqual(t, nil, err) 39 ItsEqual(t, "", cfg.First) 40 ItsEqual(t, "", cfg.Second) 41 } 42 43 func Test_Read_multiple(t *testing.T) { 44 contents0 := `{ 45 "serviceName": "serviceName-contents0", 46 47 "field0": "field0-contents0", 48 "field2": "field2-contents0", 49 "field3": "field3-contents0", 50 51 "child": { 52 "field0": "child-field0-contents0", 53 "field2": "child-field2-contents0", 54 "field3": "child-field3-contents0" 55 } 56 }` 57 58 contents1 := `{ 59 "serviceEnv": "serviceEnv-contents1", 60 61 "field1": "field1-contents1", 62 "field3": "field3-contents1", 63 64 "child": { 65 "field1": "child-field1-contents1", 66 "field3": "child-field3-contents1" 67 } 68 }` 69 70 contents2 := `{ 71 "version": "version-contents2", 72 73 "field2": "field2-contents2", 74 75 "child": { 76 "field2": "child-field2-contents2" 77 } 78 } 79 ` 80 var cfg fullConfig 81 path, err := Read(&cfg, 82 OptPaths(""), 83 OptAddContentString(contents0), 84 OptAddContentString(contents1), 85 OptAddContentString(contents2), 86 OptEnv(map[string]string{"SERVICE_ENV": "env-resolved"}), 87 OptDeserializer(func(r io.Reader, f any) error { 88 return json.NewDecoder(r).Decode(f) 89 }), 90 ) 91 92 ItsEqual(t, nil, err) 93 ItsEqual(t, nil, path) 94 ItsEqual(t, "env-resolved", cfg.ServiceEnv) 95 96 ItsEqual(t, "serviceName-contents0", cfg.ServiceName) 97 ItsEqual(t, "version-contents2", cfg.Version) 98 99 ItsEqual(t, "field0-contents0", cfg.Field0) 100 ItsEqual(t, "field1-contents1", cfg.Field1) 101 ItsEqual(t, "field2-contents2", cfg.Field2) 102 ItsEqual(t, "field3-contents1", cfg.Field3) 103 104 ItsEqual(t, "child-field0-contents0", cfg.Child.Field0) 105 ItsEqual(t, "child-field1-contents1", cfg.Child.Field1) 106 ItsEqual(t, "child-field2-contents2", cfg.Child.Field2) 107 ItsEqual(t, "child-field3-contents1", cfg.Child.Field3) 108 }