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 }