...
1 package fetcher
2
3 import (
4 "encoding/base64"
5 "fmt"
6 "io/ioutil"
7 "net/http"
8 "os"
9 "testing"
10
11 "github.com/gobuffalo/httptest"
12 "github.com/julienschmidt/httprouter"
13 "github.com/stretchr/testify/assert"
14 "github.com/stretchr/testify/require"
15 )
16
17 func TestFetcher(t *testing.T) {
18 router := httprouter.New()
19 router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
20 _, _ = w.Write([]byte(`{"foo":"bar"}`))
21 })
22 ts := httptest.NewServer(router)
23 t.Cleanup(ts.Close)
24
25 file, err := ioutil.TempFile(os.TempDir(), "source.*.json")
26 require.NoError(t, err)
27
28 _, err = file.WriteString(`{"foo":"baz"}`)
29 require.NoError(t, err)
30 require.NoError(t, file.Close())
31
32 for fc, fetcher := range []*Fetcher{
33 NewFetcher(WithClient(ts.Client())),
34 NewFetcher(),
35 } {
36 for k, tc := range []struct {
37 source string
38 expect string
39 }{
40 {
41 source: "base64://" + base64.StdEncoding.EncodeToString([]byte(`{"foo":"zab"}`)),
42 expect: `{"foo":"zab"}`,
43 },
44 {
45 source: "file://" + file.Name(),
46 expect: `{"foo":"baz"}`,
47 },
48 {
49 source: ts.URL,
50 expect: `{"foo":"bar"}`,
51 },
52 } {
53 t.Run(fmt.Sprintf("config=%d/case=%d", fc, k), func(t *testing.T) {
54 actual, err := fetcher.Fetch(tc.source)
55 require.NoError(t, err)
56 assert.JSONEq(t, tc.expect, actual.String())
57 })
58 }
59 }
60 }
61
View as plain text