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

     1  package url_test
     2  
     3  import (
     4  	"fmt"
     5  	"github.com/stretchr/testify/assert"
     6  	"github.com/viant/toolbox"
     7  	"github.com/viant/toolbox/url"
     8  	"io/ioutil"
     9  	"os"
    10  	"path"
    11  	"strings"
    12  	"testing"
    13  )
    14  
    15  func TestNewResource(t *testing.T) {
    16  
    17  	{
    18  		var resource = url.NewResource("./../../test")
    19  		fmt.Printf("%v\n", resource.ParsedURL.Path)
    20  		assert.True(t, strings.HasSuffix(resource.DirectoryPath(), "viant/test"))
    21  	}
    22  
    23  	{
    24  		var resource = url.NewResource("https://raw.githubusercontent.com/viant/toolbox/master/LICENSE.txt")
    25  		assert.EqualValues(t, resource.ParsedURL.String(), "https://raw.githubusercontent.com/viant/toolbox/master/LICENSE.txt")
    26  		//data, err := resource.Download()
    27  		//assert.Nil(t, err)
    28  		//assert.NotNil(t, data)
    29  	}
    30  
    31  	{
    32  		var resource = url.NewResource("https://raw.githubusercontent.com/viant//toolbox//master/LICENSE.txt")
    33  		assert.Equal(t, "https://raw.githubusercontent.com/viant/toolbox/master/LICENSE.txt", resource.URL)
    34  	}
    35  	{
    36  		var resource = url.NewResource("./../test")
    37  		assert.True(t, strings.HasSuffix(resource.DirectoryPath(), "/toolbox/test"))
    38  	}
    39  
    40  	{
    41  		var resource = url.NewResource("../test")
    42  		assert.True(t, strings.HasSuffix(resource.DirectoryPath(), "/toolbox/test"))
    43  	}
    44  }
    45  
    46  func TestNew_CredentialURL(t *testing.T) {
    47  
    48  	{
    49  		var resource = url.NewResource("https://raw.githubusercontent.com:80/viant/toolbox/master/LICENSE.txt?check=1&p=2")
    50  		var URL = resource.CredentialURL("smith", "123")
    51  		assert.EqualValues(t, "https://smith:123@raw.githubusercontent.com:80/viant/toolbox/master/LICENSE.txt?check=1&p=2", URL)
    52  	}
    53  
    54  	{
    55  		var resource = url.NewResource("https://raw.githubusercontent.com:80/viant/toolbox/master/LICENSE.txt")
    56  		var URL = resource.CredentialURL("smith", "")
    57  		assert.EqualValues(t, "https://smith@raw.githubusercontent.com:80/viant/toolbox/master/LICENSE.txt", URL)
    58  	}
    59  
    60  }
    61  
    62  func TestNew_DirectoryPath(t *testing.T) {
    63  	{
    64  		var resource = url.NewResource("https://raw.githubusercontent.com:80/viant/toolbox/master/LICENSE.txt")
    65  		assert.EqualValues(t, "/viant/toolbox/master", resource.DirectoryPath())
    66  	}
    67  	{
    68  		var resource = url.NewResource("https://raw.githubusercontent.com:80/viant/toolbox/master/avc")
    69  		assert.EqualValues(t, "/viant/toolbox/master/avc", resource.DirectoryPath())
    70  	}
    71  	{
    72  		var resource = url.NewResource("hter")
    73  		assert.True(t, strings.HasSuffix(resource.DirectoryPath(), "hter"))
    74  	}
    75  }
    76  
    77  func TestResource_YamlDecode(t *testing.T) {
    78  	if os.Getenv("TMPDIR")== "" {
    79  		return
    80  	}
    81  	var filename1 = path.Join(os.Getenv("TMPDIR"), "resource1.yaml")
    82  	var filename2 = path.Join(os.Getenv("TMPDIR"), "resource2.yaml")
    83  	_ = toolbox.RemoveFileIfExist(filename1, filename2)
    84  	var aMap = map[string]interface{}{
    85  		"a": 1,
    86  		"b": "123",
    87  		"c": []int{1, 3, 6},
    88  	}
    89  	file, err := os.OpenFile(filename1, os.O_CREATE|os.O_RDWR, 0644)
    90  	if assert.Nil(t, err) {
    91  		err = toolbox.NewYamlEncoderFactory().Create(file).Encode(aMap)
    92  		assert.Nil(t, err)
    93  	}
    94  
    95  	{
    96  		var resource = url.NewResource(filename1)
    97  		assert.EqualValues(t, resource.ParsedURL.String(), toolbox.FileSchema+filename1)
    98  
    99  		var resourceData = make(map[string]interface{})
   100  		err = resource.YAMLDecode(&resourceData)
   101  		assert.Nil(t, err)
   102  		assert.EqualValues(t, resourceData["a"], 1)
   103  		assert.EqualValues(t, resourceData["b"], "123")
   104  	}
   105  
   106  	YAML := `init:
   107    defaultUser: &defaultUser
   108      name: bob
   109      age: 18
   110  pipeline:
   111    test:
   112      init:
   113        users:
   114          <<: *defaultUser
   115          age: 24
   116      action: print
   117      message: I got $users`
   118  	err = ioutil.WriteFile(filename2, []byte(YAML), 0644)
   119  	assert.Nil(t, err)
   120  
   121  	{
   122  		var resource = url.NewResource(filename2)
   123  		var resourceData = make(map[string]interface{})
   124  		err = resource.YAMLDecode(&resourceData)
   125  		assert.Nil(t, err)
   126  
   127  		if normalized, err := toolbox.NormalizeKVPairs(resourceData); err == nil {
   128  			resourceData = toolbox.AsMap(normalized)
   129  		}
   130  		//TODO add actual test once yaml reference is patched
   131  		//exposes issue with yaml reference
   132  	}
   133  
   134  }
   135  
   136  func TestResource_JsonDecode(t *testing.T) {
   137  	if os.Getenv("TMPDIR") == "" {
   138  		return
   139  	}
   140  	var filename = path.Join(os.Getenv("TMPDIR"), "resource.json")
   141  	toolbox.RemoveFileIfExist(filename)
   142  	defer toolbox.RemoveFileIfExist(filename)
   143  	var aMap = map[string]interface{}{
   144  		"a": 1,
   145  		"b": "123",
   146  	}
   147  	file, err := os.OpenFile(filename, os.O_CREATE|os.O_RDWR, 0644)
   148  	if assert.Nil(t, err) {
   149  		err = toolbox.NewJSONEncoderFactory().Create(file).Encode(aMap)
   150  		assert.Nil(t, err)
   151  	}
   152  
   153  	var resource = url.NewResource(filename)
   154  	assert.EqualValues(t, resource.ParsedURL.String(), toolbox.FileSchema+filename)
   155  
   156  	var resourceData = make(map[string]interface{})
   157  	err = resource.Decode(&resourceData)
   158  	assert.Nil(t, err)
   159  
   160  	assert.EqualValues(t, resourceData["a"], 1)
   161  	assert.EqualValues(t, resourceData["b"], "123")
   162  
   163  }
   164  
   165  func TestResource_DecoderFactory(t *testing.T) {
   166  	{
   167  		resource := url.NewResource("abc.yaml")
   168  		factory := resource.DecoderFactory()
   169  		assert.NotNil(t, factory)
   170  	}
   171  	{
   172  		resource := url.NewResource("abc.json")
   173  		factory := resource.DecoderFactory()
   174  		assert.NotNil(t, factory)
   175  	}
   176  }