github.com/hairyhenderson/templater@v3.5.0+incompatible/data/datasource_file_test.go (about) 1 package data 2 3 import ( 4 "testing" 5 6 "github.com/spf13/afero" 7 8 "github.com/stretchr/testify/assert" 9 ) 10 11 func TestReadFile(t *testing.T) { 12 content := []byte(`hello world`) 13 fs := afero.NewMemMapFs() 14 15 _ = fs.Mkdir("/tmp", 0777) 16 f, _ := fs.Create("/tmp/foo") 17 _, _ = f.Write(content) 18 19 _ = fs.Mkdir("/tmp/partial", 0777) 20 f, _ = fs.Create("/tmp/partial/foo.txt") 21 _, _ = f.Write(content) 22 _, _ = fs.Create("/tmp/partial/bar.txt") 23 _, _ = fs.Create("/tmp/partial/baz.txt") 24 25 source := &Source{Alias: "foo", URL: mustParseURL("file:///tmp/foo")} 26 source.fs = fs 27 28 actual, err := readFile(source) 29 assert.NoError(t, err) 30 assert.Equal(t, content, actual) 31 32 source = &Source{Alias: "bogus", URL: mustParseURL("file:///bogus")} 33 source.fs = fs 34 _, err = readFile(source) 35 assert.Error(t, err) 36 37 source = &Source{Alias: "partial", URL: mustParseURL("file:///tmp/partial")} 38 source.fs = fs 39 actual, err = readFile(source, "foo.txt") 40 assert.NoError(t, err) 41 assert.Equal(t, content, actual) 42 43 source = &Source{Alias: "dir", URL: mustParseURL("file:///tmp/partial/")} 44 source.fs = fs 45 actual, err = readFile(source) 46 assert.NoError(t, err) 47 assert.Equal(t, []byte(`["bar.txt","baz.txt","foo.txt"]`), actual) 48 49 source = &Source{Alias: "dir", URL: mustParseURL("file:///tmp/partial/?type=application/json")} 50 source.fs = fs 51 actual, err = readFile(source) 52 assert.NoError(t, err) 53 assert.Equal(t, []byte(`["bar.txt","baz.txt","foo.txt"]`), actual) 54 mime, err := source.mimeType() 55 assert.NoError(t, err) 56 assert.Equal(t, "application/json", mime) 57 58 source = &Source{Alias: "dir", URL: mustParseURL("file:///tmp/partial/?type=application/json")} 59 source.fs = fs 60 actual, err = readFile(source, "foo.txt") 61 assert.NoError(t, err) 62 assert.Equal(t, content, actual) 63 mime, err = source.mimeType() 64 assert.NoError(t, err) 65 assert.Equal(t, "application/json", mime) 66 }