github.com/machinebox/remoto@v0.1.2-0.20191024144331-eff21a7d321f/go/remotohttp/decode_test.go (about) 1 package remotohttp_test 2 3 import ( 4 "bytes" 5 "mime/multipart" 6 "net/http" 7 "net/url" 8 "strings" 9 "testing" 10 11 "github.com/machinebox/remoto/go/remotohttp" 12 "github.com/matryer/is" 13 ) 14 15 func TestDecodeJSON(t *testing.T) { 16 is := is.New(t) 17 type r struct { 18 Name string 19 } 20 j := `[ 21 {"name": "Mat"}, 22 {"name": "David"}, 23 {"name": "Aaron"} 24 ]` 25 req, err := http.NewRequest(http.MethodPost, "/service/method", strings.NewReader(j)) 26 is.NoErr(err) 27 req.Header.Set("Content-Type", "application/json") 28 var requestObjects []r 29 err = remotohttp.Decode(req, &requestObjects) 30 is.NoErr(err) 31 is.Equal(len(requestObjects), 3) 32 is.Equal(requestObjects[0].Name, "Mat") 33 is.Equal(requestObjects[1].Name, "David") 34 is.Equal(requestObjects[2].Name, "Aaron") 35 } 36 37 func TestDecodeFormData(t *testing.T) { 38 is := is.New(t) 39 type r struct { 40 Name string 41 } 42 j := `[ 43 {"name": "Mat"}, 44 {"name": "David"}, 45 {"name": "Aaron"} 46 ]` 47 data := url.Values{} 48 data.Set("json", j) 49 req, err := http.NewRequest(http.MethodPost, "/service/method", strings.NewReader(data.Encode())) 50 is.NoErr(err) 51 req.Header.Set("Content-Type", "application/x-www-form-urlencoded") 52 var requestObjects []r 53 err = remotohttp.Decode(req, &requestObjects) 54 is.NoErr(err) 55 is.Equal(len(requestObjects), 3) 56 is.Equal(requestObjects[0].Name, "Mat") 57 is.Equal(requestObjects[1].Name, "David") 58 is.Equal(requestObjects[2].Name, "Aaron") 59 } 60 61 func TestDecodeMultipartForm(t *testing.T) { 62 is := is.New(t) 63 type r struct { 64 Name string 65 } 66 j := `[ 67 {"name": "Mat"}, 68 {"name": "David"}, 69 {"name": "Aaron"} 70 ]` 71 data := url.Values{} 72 data.Set("json", j) 73 var buf bytes.Buffer 74 w := multipart.NewWriter(&buf) 75 err := w.WriteField("json", j) 76 is.NoErr(err) 77 err = w.Close() 78 is.NoErr(err) 79 req, err := http.NewRequest(http.MethodPost, "/service/method", &buf) 80 is.NoErr(err) 81 req.Header.Set("Content-Type", w.FormDataContentType()) 82 var requestObjects []r 83 err = remotohttp.Decode(req, &requestObjects) 84 is.NoErr(err) 85 is.Equal(len(requestObjects), 3) 86 is.Equal(requestObjects[0].Name, "Mat") 87 is.Equal(requestObjects[1].Name, "David") 88 is.Equal(requestObjects[2].Name, "Aaron") 89 } 90 91 // func TestDecodeFile(t *testing.T) { 92 // is := is.New(t) 93 // type r struct { 94 // Name string 95 // Photo remototypes.File 96 // } 97 // j := string(`[ 98 // {"name": "Mat", "photo": "` + remototypes.NewFile("files[0]") + `"}, 99 // {"name": "David", "photo": "` + remototypes.NewFile("files[1]") + `"}, 100 // {"name": "Aaron", "photo": "` + remototypes.NewFile("files[2]") + `"} 101 // ]`) 102 // var buf bytes.Buffer 103 // w := multipart.NewWriter(&buf) 104 // w.WriteField("json", j) 105 // f1, err := w.CreateFormFile("files[0]", "mat.jpg") 106 // is.NoErr(err) 107 // f1.Write([]byte("mat-photo-binary-data")) 108 // f2, err := w.CreateFormFile("files[1]", "david.jpg") 109 // is.NoErr(err) 110 // f2.Write([]byte("david-photo-binary-data")) 111 // f3, err := w.CreateFormFile("files[2]", "aaron.jpg") 112 // is.NoErr(err) 113 // f3.Write([]byte("aaron-photo-binary-data")) 114 // is.NoErr(w.Close()) 115 // req, err := http.NewRequest(http.MethodPost, "/service/method", &buf) 116 // is.NoErr(err) 117 // req.Header.Set("Content-Type", w.FormDataContentType()) 118 // var requestObjects []r 119 // err = remotohttp.Decode(req, &requestObjects) 120 // is.NoErr(err) 121 // is.Equal(len(requestObjects), 3) 122 // is.Equal(requestObjects[0].Name, "Mat") 123 // is.Equal(requestObjects[1].Name, "David") 124 // is.Equal(requestObjects[2].Name, "Aaron") 125 // // ctx := context.Background() 126 // // f, err := requestObjects[0].Photo.Open(ctx) 127 // // is.NoErr(err) 128 // // defer f.Close() 129 // // matPhotoData, err := ioutil.ReadAll(f) 130 // // is.NoErr(err) 131 // // is.Equal(string(matPhotoData), `mat-photo-binary-data`) 132 // }