@@ -247,41 +247,78 @@ func Test_apiRun(t *testing.T) {
247247}
248248
249249func Test_apiRun_inputFile (t * testing.T ) {
250- io , stdin , _ , _ := iostreams .Test ()
251- resp := & http.Response {StatusCode : 204 }
252-
253- options := ApiOptions {
254- RequestPath : "hello" ,
255- RequestInputFile : "-" ,
256- RawFields : []string {"a=b" , "c=d" },
250+ tests := []struct {
251+ name string
252+ inputFile string
253+ inputContents []byte
257254
258- IO : io ,
259- HttpClient : func () (* http.Client , error ) {
260- var tr roundTripper = func (req * http.Request ) (* http.Response , error ) {
261- resp .Request = req
262- return resp , nil
263- }
264- return & http.Client {Transport : tr }, nil
255+ contentLength int64
256+ expectedContents []byte
257+ }{
258+ {
259+ name : "stdin" ,
260+ inputFile : "-" ,
261+ inputContents : []byte ("I WORK OUT" ),
262+ contentLength : 0 ,
263+ },
264+ {
265+ name : "from file" ,
266+ inputFile : "gh-test-file" ,
267+ inputContents : []byte ("I WORK OUT" ),
268+ contentLength : 10 ,
265269 },
266270 }
271+ for _ , tt := range tests {
272+ t .Run (tt .name , func (t * testing.T ) {
273+ io , stdin , _ , _ := iostreams .Test ()
274+ resp := & http.Response {StatusCode : 204 }
267275
268- fmt .Fprintln (stdin , "I WORK OUT" )
276+ inputFile := tt .inputFile
277+ if tt .inputFile == "-" {
278+ _ , _ = stdin .Write (tt .inputContents )
279+ } else {
280+ f , err := ioutil .TempFile ("" , tt .inputFile )
281+ if err != nil {
282+ t .Fatal (err )
283+ }
284+ _ , _ = f .Write (tt .inputContents )
285+ f .Close ()
286+ t .Cleanup (func () { os .Remove (f .Name ()) })
287+ inputFile = f .Name ()
288+ }
269289
270- err := apiRun (& options )
271- if err != nil {
272- t .Errorf ("got error %v" , err )
273- }
290+ var bodyBytes []byte
291+ options := ApiOptions {
292+ RequestPath : "hello" ,
293+ RequestInputFile : inputFile ,
294+ RawFields : []string {"a=b" , "c=d" },
274295
275- assert .Equal (t , "POST" , resp .Request .Method )
276- assert .Equal (t , "/hello?a=b&c=d" , resp .Request .URL .RequestURI ())
277- assert .Equal (t , "" , resp .Request .Header .Get ("Content-Length" ))
278- assert .Equal (t , "" , resp .Request .Header .Get ("Content-Type" ))
296+ IO : io ,
297+ HttpClient : func () (* http.Client , error ) {
298+ var tr roundTripper = func (req * http.Request ) (* http.Response , error ) {
299+ var err error
300+ if bodyBytes , err = ioutil .ReadAll (req .Body ); err != nil {
301+ return nil , err
302+ }
303+ resp .Request = req
304+ return resp , nil
305+ }
306+ return & http.Client {Transport : tr }, nil
307+ },
308+ }
279309
280- bb , err := ioutil .ReadAll (resp .Request .Body )
281- if err != nil {
282- t .Errorf ("got error %v" , err )
310+ err := apiRun (& options )
311+ if err != nil {
312+ t .Errorf ("got error %v" , err )
313+ }
314+
315+ assert .Equal (t , "POST" , resp .Request .Method )
316+ assert .Equal (t , "/hello?a=b&c=d" , resp .Request .URL .RequestURI ())
317+ assert .Equal (t , tt .contentLength , resp .Request .ContentLength )
318+ assert .Equal (t , "" , resp .Request .Header .Get ("Content-Type" ))
319+ assert .Equal (t , tt .inputContents , bodyBytes )
320+ })
283321 }
284- assert .Equal (t , "I WORK OUT\n " , string (bb ))
285322}
286323
287324func Test_parseFields (t * testing.T ) {
@@ -400,7 +437,7 @@ func Test_openUserFile(t *testing.T) {
400437 f .Close ()
401438 t .Cleanup (func () { os .Remove (f .Name ()) })
402439
403- file , err := openUserFile (f .Name (), nil )
440+ file , length , err := openUserFile (f .Name (), nil )
404441 if err != nil {
405442 t .Fatal (err )
406443 }
@@ -411,5 +448,6 @@ func Test_openUserFile(t *testing.T) {
411448 t .Fatal (err )
412449 }
413450
451+ assert .Equal (t , int64 (13 ), length )
414452 assert .Equal (t , "file contents" , string (fb ))
415453}
0 commit comments