@@ -29,12 +29,12 @@ import (
2929 "github.com/stretchr/testify/assert"
3030)
3131
32- func TestAPIListReleases (t * testing.T ) {
32+ func TestAPIListReleasesWithWriteToken (t * testing.T ) {
3333 defer tests .PrepareTestEnv (t )()
3434
3535 repo := unittest .AssertExistsAndLoadBean (t , & repo_model.Repository {ID : 1 })
3636 user2 := unittest .AssertExistsAndLoadBean (t , & user_model.User {ID : 2 })
37- token := getUserToken (t , user2 .LowerName , auth_model .AccessTokenScopeReadRepository )
37+ token := getUserToken (t , user2 .LowerName , auth_model .AccessTokenScopeWriteRepository )
3838
3939 link , _ := url .Parse (fmt .Sprintf ("/api/v1/repos/%s/%s/releases" , user2 .Name , repo .Name ))
4040 resp := MakeRequest (t , NewRequest (t , "GET" , link .String ()).AddTokenAuth (token ), http .StatusOK )
@@ -81,6 +81,76 @@ func TestAPIListReleases(t *testing.T) {
8181 testFilterByLen (true , url.Values {"draft" : {"true" }, "pre-release" : {"true" }}, 0 , "there is no pre-release draft" )
8282}
8383
84+ func TestAPIListReleasesWithReadToken (t * testing.T ) {
85+ defer tests .PrepareTestEnv (t )()
86+
87+ repo := unittest .AssertExistsAndLoadBean (t , & repo_model.Repository {ID : 1 })
88+ user2 := unittest .AssertExistsAndLoadBean (t , & user_model.User {ID : 2 })
89+ token := getUserToken (t , user2 .LowerName , auth_model .AccessTokenScopeReadRepository )
90+
91+ link , _ := url .Parse (fmt .Sprintf ("/api/v1/repos/%s/%s/releases" , user2 .Name , repo .Name ))
92+ resp := MakeRequest (t , NewRequest (t , "GET" , link .String ()).AddTokenAuth (token ), http .StatusOK )
93+ var apiReleases []* api.Release
94+ DecodeJSON (t , resp , & apiReleases )
95+ if assert .Len (t , apiReleases , 2 ) {
96+ for _ , release := range apiReleases {
97+ switch release .ID {
98+ case 1 :
99+ assert .False (t , release .IsDraft )
100+ assert .False (t , release .IsPrerelease )
101+ assert .True (t , strings .HasSuffix (release .UploadURL , "/api/v1/repos/user2/repo1/releases/1/assets" ), release .UploadURL )
102+ case 5 :
103+ assert .False (t , release .IsDraft )
104+ assert .True (t , release .IsPrerelease )
105+ assert .True (t , strings .HasSuffix (release .UploadURL , "/api/v1/repos/user2/repo1/releases/5/assets" ), release .UploadURL )
106+ default :
107+ assert .NoError (t , fmt .Errorf ("unexpected release: %v" , release ))
108+ }
109+ }
110+ }
111+
112+ // test filter
113+ testFilterByLen := func (auth bool , query url.Values , expectedLength int , msgAndArgs ... string ) {
114+ link .RawQuery = query .Encode ()
115+ req := NewRequest (t , "GET" , link .String ())
116+ if auth {
117+ req .AddTokenAuth (token )
118+ }
119+ resp = MakeRequest (t , req , http .StatusOK )
120+ DecodeJSON (t , resp , & apiReleases )
121+ assert .Len (t , apiReleases , expectedLength , msgAndArgs )
122+ }
123+
124+ testFilterByLen (false , url.Values {"draft" : {"true" }}, 0 , "anon should not see drafts" )
125+ testFilterByLen (true , url.Values {"draft" : {"true" }}, 0 , "repo owner with read token should not see drafts" )
126+ testFilterByLen (true , url.Values {"draft" : {"false" }}, 2 , "exclude drafts" )
127+ testFilterByLen (true , url.Values {"draft" : {"false" }, "pre-release" : {"false" }}, 1 , "exclude drafts and pre-releases" )
128+ testFilterByLen (true , url.Values {"pre-release" : {"true" }}, 1 , "only get pre-release" )
129+ testFilterByLen (true , url.Values {"draft" : {"true" }, "pre-release" : {"true" }}, 0 , "there is no pre-release draft" )
130+ }
131+
132+ func TestAPIGetDraftRelease (t * testing.T ) {
133+ defer tests .PrepareTestEnv (t )()
134+
135+ repo := unittest .AssertExistsAndLoadBean (t , & repo_model.Repository {ID : 1 })
136+ release := unittest .AssertExistsAndLoadBean (t , & repo_model.Release {ID : 4 })
137+ owner := unittest .AssertExistsAndLoadBean (t , & user_model.User {ID : repo .OwnerID })
138+ reader := unittest .AssertExistsAndLoadBean (t , & user_model.User {ID : 1 })
139+
140+ urlStr := fmt .Sprintf ("/api/v1/repos/%s/%s/releases/%d" , owner .Name , repo .Name , release .ID )
141+
142+ MakeRequest (t , NewRequest (t , "GET" , urlStr ), http .StatusNotFound )
143+
144+ readerToken := getUserToken (t , reader .LowerName , auth_model .AccessTokenScopeReadRepository )
145+ MakeRequest (t , NewRequest (t , "GET" , urlStr ).AddTokenAuth (readerToken ), http .StatusNotFound )
146+
147+ ownerToken := getUserToken (t , owner .LowerName , auth_model .AccessTokenScopeWriteRepository )
148+ resp := MakeRequest (t , NewRequest (t , "GET" , urlStr ).AddTokenAuth (ownerToken ), http .StatusOK )
149+ var apiRelease api.Release
150+ DecodeJSON (t , resp , & apiRelease )
151+ assert .Equal (t , release .Title , apiRelease .Title )
152+ }
153+
84154func createNewReleaseUsingAPI (t * testing.T , token string , owner * user_model.User , repo * repo_model.Repository , name , target , title , desc string ) * api.Release {
85155 urlStr := fmt .Sprintf ("/api/v1/repos/%s/%s/releases" , owner .Name , repo .Name )
86156 req := NewRequestWithJSON (t , "POST" , urlStr , & api.CreateReleaseOption {
0 commit comments