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  }