44 "bytes"
55 "encoding/json"
66 "fmt"
7+ "io"
78 "io/ioutil"
89 "net/http"
910 "os"
@@ -290,6 +291,36 @@ func Test_createRun(t *testing.T) {
290291 wantStdout : "https://github.com/OWNER/REPO/releases/tag/v1.2.3\n " ,
291292 wantStderr : `` ,
292293 },
294+ {
295+ name : "publish after uploading files" ,
296+ isTTY : true ,
297+ opts : CreateOptions {
298+ TagName : "v1.2.3" ,
299+ Name : "" ,
300+ Body : "" ,
301+ BodyProvided : true ,
302+ Draft : false ,
303+ Target : "" ,
304+ Assets : []* shared.AssetForUpload {
305+ {
306+ Name : "ball.tgz" ,
307+ Open : func () (io.ReadCloser , error ) {
308+ return ioutil .NopCloser (bytes .NewBufferString (`TARBALL` )), nil
309+ },
310+ },
311+ },
312+ Concurrency : 1 ,
313+ },
314+ wantParams : map [string ]interface {}{
315+ "tag_name" : "v1.2.3" ,
316+ "name" : "" ,
317+ "body" : "" ,
318+ "draft" : true ,
319+ "prerelease" : false ,
320+ },
321+ wantStdout : "https://github.com/OWNER/REPO/releases/tag/v1.2.3-final\n " ,
322+ wantStderr : `` ,
323+ },
293324 }
294325 for _ , tt := range tests {
295326 t .Run (tt .name , func (t * testing.T ) {
@@ -300,8 +331,14 @@ func Test_createRun(t *testing.T) {
300331
301332 fakeHTTP := & httpmock.Registry {}
302333 fakeHTTP .Register (httpmock .REST ("POST" , "repos/OWNER/REPO/releases" ), httpmock .StatusStringResponse (201 , `{
334+ "url": "https://api.github.com/releases/123",
335+ "upload_url": "https://api.github.com/assets/upload",
303336 "html_url": "https://github.com/OWNER/REPO/releases/tag/v1.2.3"
304337 }` ))
338+ fakeHTTP .Register (httpmock .REST ("POST" , "assets/upload" ), httpmock .StatusStringResponse (201 , `{}` ))
339+ fakeHTTP .Register (httpmock .REST ("PATCH" , "releases/123" ), httpmock .StatusStringResponse (201 , `{
340+ "html_url": "https://github.com/OWNER/REPO/releases/tag/v1.2.3-final"
341+ }` ))
305342
306343 tt .opts .IO = io
307344 tt .opts .HttpClient = func () (* http.Client , error ) {
@@ -326,6 +363,19 @@ func Test_createRun(t *testing.T) {
326363 require .NoError (t , err )
327364 assert .Equal (t , tt .wantParams , params )
328365
366+ if len (tt .opts .Assets ) > 0 {
367+ q := fakeHTTP .Requests [1 ].URL .Query ()
368+ assert .Equal (t , tt .opts .Assets [0 ].Name , q .Get ("name" ))
369+ assert .Equal (t , tt .opts .Assets [0 ].Label , q .Get ("label" ))
370+
371+ bb , err := ioutil .ReadAll (fakeHTTP .Requests [2 ].Body )
372+ require .NoError (t , err )
373+ var updateParams interface {}
374+ err = json .Unmarshal (bb , & updateParams )
375+ require .NoError (t , err )
376+ assert .Equal (t , map [string ]interface {}{"draft" : false }, updateParams )
377+ }
378+
329379 assert .Equal (t , tt .wantStdout , stdout .String ())
330380 assert .Equal (t , tt .wantStderr , stderr .String ())
331381 })
0 commit comments