github.com/viant/toolbox@v0.34.5/yaml_test.go (about)

     1  package toolbox
     2  
     3  import (
     4  	"encoding/json"
     5  	"strings"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/assert"
     9  	yaml "gopkg.in/yaml.v2"
    10  )
    11  
    12  func TestNormalizeKVPairs(t *testing.T) {
    13  
    14  	{ //yaml case
    15  		YAML := `- Requests:
    16      - URL: http://localhost:5000
    17        Method: GET
    18        Header:
    19          aHeader:
    20            - "v1"
    21            - "v2"
    22  
    23          someOtherHeader:
    24  
    25            - "CP=RTO"
    26  
    27        Body: "hey there"
    28        Cookies:
    29          - Name: aHeader
    30            Value: a-value
    31            DYAMLomain: "localhost"
    32            Expires: "2023-12-16T20:17:38Z"
    33            RawExpires: Sat, 16 Dec 2023 20:17:38 GMT`
    34  
    35  		var data interface{}
    36  		err := yaml.NewDecoder(strings.NewReader(YAML)).Decode(&data)
    37  		assert.Nil(t, err)
    38  		normalized, err := NormalizeKVPairs(data)
    39  		assert.Nil(t, err)
    40  		requests := AsMap(AsSlice(normalized)[0])["Requests"]
    41  		request := AsMap(AsSlice(requests)[0])
    42  		assert.Equal(t, "http://localhost:5000", request["URL"])
    43  		header := AsMap(request["Header"])
    44  		assert.Equal(t, []interface{}{"v1", "v2"}, header["aHeader"])
    45  	}
    46  	{
    47  		JSON := `[
    48  {"Key":"k1", "Value":"v1"},
    49  {"Key":"k2", "Value":"v2"},
    50  {"Key":"k3", "Value":[
    51  	{"Key":"k1", "Value":"v1", "Attr":2}
    52  ]}]`
    53  
    54  		var data interface{}
    55  		err := json.NewDecoder(strings.NewReader(JSON)).Decode(&data)
    56  		assert.Nil(t, err)
    57  		normalized, err := NormalizeKVPairs(data)
    58  		assert.Nil(t, err)
    59  		aMap := AsMap(normalized)
    60  		assert.Equal(t, "v1", aMap["k1"])
    61  		assert.Equal(t, "v2", aMap["k2"])
    62  		aSlice := AsSlice(aMap["k3"])
    63  		assert.NotNil(t, aSlice)
    64  		anItem := AsMap(aSlice[0])
    65  		assert.Equal(t, "k1", anItem["Key"])
    66  		assert.Equal(t, "v1", anItem["Value"])
    67  		assert.Equal(t, 2.0, anItem["Attr"])
    68  	}
    69  
    70  }