@@ -354,32 +354,65 @@ func TestRepositoriesService_DeleteReleaseAsset(t *testing.T) {
354
354
}
355
355
356
356
func TestRepositoriesService_UploadReleaseAsset (t * testing.T ) {
357
+ uploadTests := []struct {
358
+ uploadOpts * UploadOptions
359
+ fileName string
360
+ expectedMediaType string
361
+ }{
362
+ // No file extension and no explicit media type.
363
+ {
364
+ & UploadOptions {Name : "n" },
365
+ "upload" ,
366
+ defaultMediaType ,
367
+ },
368
+ // File extension and no explicit media type.
369
+ {
370
+ & UploadOptions {Name : "n" },
371
+ "upload.txt" ,
372
+ "text/plain; charset=utf-8" ,
373
+ },
374
+ // No file extension and explicit media type.
375
+ {
376
+ & UploadOptions {Name : "n" , MediaType : "image/png" },
377
+ "upload" ,
378
+ "image/png" ,
379
+ },
380
+ // File extension and explicit media type.
381
+ {
382
+ & UploadOptions {Name : "n" , MediaType : "image/png" },
383
+ "upload.png" ,
384
+ "image/png" ,
385
+ },
386
+ }
387
+
357
388
client , mux , _ , teardown := setup ()
358
389
defer teardown ()
359
390
360
- mux .HandleFunc ("/repos/o/r/releases/1/assets" , func (w http.ResponseWriter , r * http.Request ) {
361
- testMethod (t , r , "POST" )
362
- testHeader (t , r , "Content-Type" , "text/plain; charset=utf-8" )
363
- testHeader (t , r , "Content-Length" , "12" )
364
- testFormValues (t , r , values {"name" : "n" })
365
- testBody (t , r , "Upload me !\n " )
366
-
367
- fmt .Fprintf (w , `{"id":1}` )
368
- })
369
-
370
- file , dir , err := openTestFile ("upload.txt" , "Upload me !\n " )
371
- if err != nil {
372
- t .Fatalf ("Unable to create temp file: %v" , err )
373
- }
374
- defer os .RemoveAll (dir )
391
+ for key , test := range uploadTests {
392
+ releaseEndpoint := fmt .Sprintf ("/repos/o/r/releases/%d/assets" , key )
393
+ mux .HandleFunc (releaseEndpoint , func (w http.ResponseWriter , r * http.Request ) {
394
+ testMethod (t , r , "POST" )
395
+ testHeader (t , r , "Content-Type" , test .expectedMediaType )
396
+ testHeader (t , r , "Content-Length" , "12" )
397
+ testFormValues (t , r , values {"name" : "n" })
398
+ testBody (t , r , "Upload me !\n " )
399
+
400
+ fmt .Fprintf (w , `{"id":1}` )
401
+ })
402
+
403
+ file , dir , err := openTestFile (test .fileName , "Upload me !\n " )
404
+ if err != nil {
405
+ t .Fatalf ("Unable to create temp file: %v" , err )
406
+ }
407
+ defer os .RemoveAll (dir )
375
408
376
- opt := & UploadOptions { Name : "n" }
377
- asset , _ , err := client . Repositories . UploadReleaseAsset ( context . Background (), "o" , "r" , 1 , opt , file )
378
- if err != nil {
379
- t . Errorf ( "Repositories.UploadReleaseAssert returned error: %v" , err )
380
- }
381
- want := & ReleaseAsset { ID : Int64 ( 1 )}
382
- if ! reflect . DeepEqual ( asset , want ) {
383
- t . Errorf ( "Repositories.UploadReleaseAssert returned %+v, want %+v" , asset , want )
409
+ asset , _ , err := client . Repositories . UploadReleaseAsset ( context . Background (), "o" , "r" , int64 ( key ), test . uploadOpts , file )
410
+ if err != nil {
411
+ t . Errorf ( "Repositories.UploadReleaseAssert returned error: %v" , err )
412
+ }
413
+ want := & ReleaseAsset { ID : Int64 ( 1 ) }
414
+ if ! reflect . DeepEqual ( asset , want ) {
415
+ t . Errorf ( "Repositories.UploadReleaseAssert returned %+v, want %+v" , asset , want )
416
+ }
384
417
}
385
418
}
0 commit comments