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  // }